1. 程式人生 > >Apache Commons IO之FileUtils的常用方法

Apache Commons IO之FileUtils的常用方法

unit 文件系統 全部 string類 force 輸出 cfi 異常 兩個文件

Apache Commons IO

在學習io流的時候研究(翻譯)了一下這個,只有FileUtils的某些方法,並不全面,還請諒解

org.apache.commons.io

這個包下定義了基於 streams, readers, writers and files.的實用工具類.

org.apache.commons.io.comparator

這個包下定義了基於文件的各種比較器的實現

org.apache.commons.io.filefilter

這個包定義了一個接口(IoFielFieldField),融合了FieldField1和FielnaMeField.

org.apache.commons.io.input

這個包提供輸入類的實現,如輸入流和讀取字符流。

org.apache.commons.io.monitor

這個包提供了一個用於監視文件系統事件(目錄和文件創建、更新和刪除事件)的組件。

org.apache.commons.io.output

這個包提供輸出類的實現, 如輸出流和寫入流

org.apache.commons.io.serialization

這個包提供了一個用於控制類反序列化的框架。

FileUtils中的常用方法

package com.wzlove.commons;

import org.apache.commons.io.FileUtils;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * 測試FileUtiles中的常用方法
 *
 * @author WZLOVE
 * @create 2018-07-21 13:29
 */
public class FileUtilsDemo {


    /**
     * static void  cleanDirectory(File directory)
     * 刪除文件夾內的所有內容,但不刪除本文件夾
     */
    @Test
    public void testCleanDirectory() throws IOException {
        // 註意的是創建的文件夾的虛擬路徑
        File dir = new File("F:\\ddd\\aaa");
        FileUtils.cleanDirectory(dir);
    }

    /**
     * static boolean contentEquals(File file1, File file2)
     * 比較兩個文件的內容是否相同,相同返回true,不同返回false(.註意的是兩個文件不存在,也會返回true)
     */
    @Test
    public void testContentEquals() throws IOException {
        File file1 = new File("F:\\ddd\\aaa\\a.txt");
        File file2 = new File("F:\\ddd\\aaa\\b.txt");
        System.out.println(FileUtils.contentEquals(file1,file2));
    }

    /**
     * static File[] convertFileCollectionToFileArray(Collection<File> files)
     * 將集合轉化為數組
     */
    @Test
    public void testConvertFileCollectionToFileArray(){
        ArrayList<File> fileList = new ArrayList<>();
        fileList.add(new File("C:\\aa"));
        fileList.add(new File("D:\\aa"));
        fileList.add(new File("E:\\aa"));
        fileList.add(new File("F:\\aa"));
        File[] files = FileUtils.convertFileCollectionToFileArray(fileList);
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getAbsolutePath());
        }
    }

    /**
     * static void  copyDirectory(File srcDir, File destDir)
     * 將srcDir目錄下的文件復制到destDir目錄下,文件存在則不重復復制
     * 還有很多重載的方法,可以傳遞文件過濾器等等
     */
    @Test
    public void testCopyDirectory() throws IOException {
        File srcDir = new File("F:\\aaa");
        File destDir = new File("F:\\bbb");
        FileUtils.copyDirectory(srcDir,destDir);
    }

    /**
     * static void  copyDirectoryToDirectory(File srcDir, File destDir)
     * 將srcDir整個文件夾放在destDir的文件夾下
     */
    @Test
    public void testCopyDirectoryToDirectory() throws IOException {
        File srcDir = new File("F:\\aaa");
        File destDir = new File("F:\\bbb");
        FileUtils.copyDirectoryToDirectory(srcDir,destDir);
    }

    /**
     * static void  copyFile(File srcFile, File destFile)
     * 將srcFile文件復制到destFile中,destFile不存在則會創建目標文件
     */
    @Test
    public void testCopyFile() throws IOException {
        File srcDir = new File("F:\\aaa\\1.txt");
        File destDir = new File("F:\\bbb\\a.txt");
        FileUtils.copyFile(srcDir,destDir);
    }

    /**
     * static void  copyFileToDirectory(File srcFile, File destDir)
     * 將srcFile文件復制到destDir的目錄下
     */
    @Test
    public void testCopyFileToDirectory() throws IOException {
        File srcDir = new File("F:\\aaa\\1.txt");
        File destDir = new File("F:\\bbb");
        FileUtils.copyFileToDirectory(srcDir,destDir);
    }

    /**
     * static void  copyToDirectory(File src, File destDir)
     * 復制文件或者文件夾到目標文件夾下
     */
    @Test
    public void testCopyToDirectory() throws IOException {
        File srcDir = new File("F:\\aaa");
        File destDir = new File("F:\\bbb");
        FileUtils.copyToDirectory(srcDir,destDir);
    }

    /**
     * static void  copyURLToFile(URL source, File destination)
     * Copies bytes from the URL source to a file destination.
     */
    @Test
    public void testCopyURLToFile() throws IOException {
        File destination = new File("F:\\bbb\\baidu.txt");
        FileUtils.copyURLToFile(new URL("http://ntlias-stu.boxuegu.com/#/index"),destination);
    }

    /**
     * static void  deleteDirectory(File directory)
     * 刪除這個文件夾,全部刪除,包括這個文件,和cleanDirectory方法做個對比
     */
    @Test
    public void testDeleteDirectory() throws IOException {
        File directory = new File("F:\\bbb\\ccc");
        FileUtils.deleteDirectory(directory);
    }

    /**
     * static boolean   deleteQuietly(File file)
     * 刪除這個文件,不會拋出異常
     */
    @Test
    public void testDeleteQuietly() {
        File directory = new File("F:\\bbb\\a.txt");
        System.out.println(FileUtils.deleteQuietly(directory));
    }

    /**
     * static void  forceMkdir(File directory)
     * 創建文件夾,可以創建多級文件夾
     */
    @Test
    public void testForceMkdir() throws IOException {
        File directory = new File("F:\\bbb\\ccc\\ddd\\aaa");
        FileUtils.forceMkdir(directory);
    }

    /**
     * static void  forceMkdirParent(File file)
     * 為一個文件創建父路徑,但不會創建這個文件(比較奇怪)
     */
    @Test
    public void testForceMkdirParent() throws IOException {
        File directory = new File("F:\\bbb\\aaa\\ccc\\a.txt");
        FileUtils.forceMkdirParent(directory);
    }

    /**
     * static String getUserDirectoryPath()
     * 返回用戶的主目錄
     */
    @Test
    public void testGetUserDirectoryPath(){
        String str = FileUtils.getUserDirectoryPath();
        System.out.println(str);
    }

    /**
     * static void  moveDirectory(File srcDir, File destDir)
     * 修改文件名,將srcDir.getName()的文件名更改為destDir.getName(),如果文件名存在,報錯
     */
    @Test
    public void testMoveDirectory() throws IOException {
        File srcDir = new File("F:\\aaa");
        File destDir = new File("F:\\ccc");
        FileUtils.moveDirectory(srcDir,destDir);
    }

    /**
     * static void  moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)
     *  將src移動到destDir,後面的boolean表示是不是當destDir文件夾不存在時創建文件夾,false是不創建,true是創建
     *  如果src不存在報錯,如果src已經存在destDir中,則報錯
     */
    @Test
    public void testMoveDirectoryToDirectory() throws IOException {
        File srcDir = new File("F:\\bbb");
        File destDir = new File("F:\\eee");
        FileUtils.moveDirectoryToDirectory(srcDir,destDir,true);
    }

    /**
     * static void  moveFile(File srcFile, File destFile)
     * 修改文件名
     * static void  moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)
     * 移動一個文件到文件夾中,最後的參數為true表示如果destDir不存在的話則創建,為false則不創建
     * static void  moveToDirectory(File src, File destDir, boolean createDestDir)
     * 移動文件或者文件夾到目標文件夾,最後的參數為true表示如果destDir不存在的話則創建,為false則不創建
     */


    /**
     * static FileInputStream openInputStream(File file)
     * 返回文件字節輸入流
     */
    @Test
    public void testOpenInputStream() throws IOException {
        File file = new File("F:\\bbb\\1.txt");
        FileInputStream fis = FileUtils.openInputStream(file);
        // 可以進行字節流的讀取操作

        fis.close();
    }

     /**
      * static FileOutputStream openOutputStream(File file)
      * 返回字節輸出流,如果文件等多及目錄不存在,則創建多級目錄,目錄存在,清空文件內容
      */

    /**
     * static FileOutputStream  openOutputStream(File file, boolean append)
     * 返回字節輸出流,如果文件等多及目錄不存在,則創建多級目錄,如果目錄存在,則不會清空內容,輸出到文件的時候,會追加到原內容的後面
     */

    /**
     * static byte[]    readFileToByteArray(File file)
     * 讀取文件,返回字節數組
     */
    @Test
    public void testReadFileToByteArray() throws IOException {
        File file = new File("F:\\bbb\\1.txt");
        byte[] bytes = FileUtils.readFileToByteArray(file);
        System.out.println(new String(bytes));
    }

    /**
     * static String    readFileToString(File file, String encoding)
     * 按照指定編碼格式讀取文件
     */
    @Test
    public void testReadFileToString() throws IOException {
        File file = new File("F:\\bbb\\1.txt");
        String str = FileUtils.readFileToString(file,"UTF-8");
        System.out.println(str);
    }

    /**
     * static List<String>  readLines(File file, String encoding)
     *  按照指定編碼讀取文件,返回String集合,文件的每一行是一個元素
     */
    @Test
    public void testReadLines() throws IOException {
        File file = new File("F:\\bbb\\1.txt");
        List<String> list = FileUtils.readLines(file, "UTF-8");
        for (String s : list) {
            System.out.println(s);
        }
    }

    /**
     * static long  sizeOf(File file)
     * 返回文件或者文件夾的大小
     */
    @Test
    public void testSizeOf() throws IOException {
        File file = new File("F:\\bbb\\1.txt");
        long l  = FileUtils.sizeOf(file);
        System.out.println(l);
        File file1 = new File("F:\\bbb");
        System.out.println(FileUtils.sizeOf(file1));
    }

    /**
     * static File  toFile(URL url)
     * Convert from a URL to a File.
     * 沒理解
     */
    @Test
    public void testToFile() throws IOException {
        File file = FileUtils.toFile(new URL("file:\\F:\\bbb"));
        System.out.println(file.getAbsolutePath());
    }

    /**
     * static void  writeByteArrayToFile(File file, byte[] data)
     * 向文件中寫入字節數組,如果目標文件不存在,則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeByteArrayToFile(File file, byte[] data, boolean append)
     * 向文件中寫入字節數組,如果目標文件不存在,則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     * static void  writeByteArrayToFile(File file, byte[] data, int off, int len)
     * 將byte類型的數組data,從off索引開始,長度為len的內容輸出到指定的文件,如果目標文件不存在,則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)
     * 將byte類型的數組data,從off索引開始,長度為len的內容輸出到指定的文件,如果目標文件不存在,則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     * static void  writeStringToFile(File file, String data, String encoding)
     * 按照指定的編碼格式將String類型的數據寫入到文件中,如果目標文件不存在,則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeStringToFile(File file, String data, String encoding, boolean append)
     * 按照指定的編碼格式將String類型的數據寫入到文件中,如果目標文件不存在,則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     */


    /**
     * static void  writeLines(File file, Collection<?> lines)
     * 將集合數據寫入文件,每條數據占據一行,如果目標文件不存在,則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeLines(File file, Collection<?> lines, boolean append)
     *  將集合數據寫入文件,每條數據占據一行,
     */
    @Test
    public void testWriteLines() throws IOException {
        File file = new File("F:\\ddd\\a.txt");
        ArrayList<String> coll = new ArrayList<>();
        coll.add("I love Java");
        coll.add("I love you");
        FileUtils.writeLines(file,coll);
    }

    /**
     * static void  writeLines(File file, Collection<?> lines, String lineEnding)
     * 所有的集合數據保存在一行,並且是間隔的,也就是每條集合數據後會跟一個lineEnding字符串,如果目標文件不存在,
     * 則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeLines(File file, Collection<?> lines, String lineEnding, boolean append)
     * 所有的集合數據保存在一行,並且是間隔的,也就是每條集合數據後會跟一個lineEnding字符串.如果目標文件不存在,
     * 則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     */
    @Test
    public void tesWriteLines2() throws IOException {
        File file = new File("F:\\ddd\\a.txt");
        ArrayList<String> coll = new ArrayList<>();
        coll.add("I love Java");
        coll.add("I love Java");
        coll.add("I love Java");
        FileUtils.writeLines(file,coll,"I love you");
    }

    /**
     * static void  writeLines(File file, String encoding, Collection<?> lines)
     * 按照encoding編碼格式將集合數據寫出到文件中,每條數據占據一行,如果目標文件不存在,
     * 則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeLines(File file, String encoding, Collection<?> lines, boolean append)
     * 按照encoding編碼格式將集合數據寫出到文件中,每條數據占據一行,如果目標文件不存在,
     *  則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     */
    @Test
    public void tesWriteLines3() throws IOException {
        File file = new File("F:\\ddd\\a.txt");
        ArrayList<String> coll = new ArrayList<>();
        coll.add("I love Java");
        coll.add("I love Java");
        coll.add("I love Java");
        FileUtils.writeLines(file,"UTF-8",coll);
    }

    /**
     * static void  writeLines(File file, String encoding, Collection<?> lines, String lineEnding)
     * 按照encoding編碼格式將集合數據寫出到文件中,所有的集合數據保存在一行,並且是間隔的,也就是每條集合數據後會跟一
     * 個lineEnding字符串,如果目標文件不存在, 則會創建目標文件,文件存在清空文件內容,再進行輸入
     * static void  writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append)
     * 按照encoding編碼格式將集合數據寫出到文件中,所有的集合數據保存在一行,並且是間隔的,也就是每條集合數據後會跟一
     * 個lineEnding字符串,如果目標文件不存在, 則會創建目標文件,文件存在且最後一個參數是true,會將內容追加到原內容的後面
     */
    @Test
    public void tesWriteLines4() throws IOException {
        File file = new File("F:\\ddd\\a.txt");
        ArrayList<String> coll = new ArrayList<>();
        coll.add("I love Java");
        coll.add("I love Java");
        coll.add("I love Java");
        FileUtils.writeLines(file,"UTF-8",coll,"I love you");
    }

}

Apache Commons IO之FileUtils的常用方法