【Java基礎】-- FileUtils工具類常用方法

1.FileUtils介紹

文件IO是我們日常項目中經常使用到的基礎API,常見的IO讀寫操作基礎類字節流InputStream與OutputStream、字符流Reader與Writer已經涵蓋了我們日常項目開發中的常見API功能。具體的基礎回顧可以參見一篇cdsn博文:字符流與字節流的區別

        今天要說的,是我們基於上述API由Apache開源項目封裝的一個更好用的文件操作工具類FileUtils,涵蓋了讀取文件、拷貝文件、拷貝目錄及文件、刪除目錄及文件、清除目錄等比較常用的靜態類封裝。

  FileUtils的使用需要引入apache的commons-io包下的FileUtils,導入:import org.apache.commons.io.FileUtils;

  官方API文檔:http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html

  maven項目使用需要導入依賴:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

下面簡單介紹一下它常見的API方法的使用。

1.1.讀取文件

官方API中我覺得能使用到的就是下面的方法,都是靜態方法,如readFileToString、readLines(按行讀取)等,對應的靜態方法也都提供了支持編碼"utf-8"格式讀取。

 

 1.2.拷貝文件

比較常用的API方法如下,如copyFile、copyInputStreamToFile、copyFileToDirectory。

 ①拷貝文件到文件copyFile(File srcFile, File destFile)

File file = new File("E:\\java\\file01\\abc雪.jpg");
String destFilePath = "E:\\java\\file02";
String destFileName = "abc雪02.jpg";
try {
    FileUtils fileUtils = new FileUtils();
    //文件拷貝到新的位置並保存文件的日期。
    fileUtils.copyFile(file, new File(destFilePath,destFileName));
    System.out.println("文件拷貝成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

拷貝文件到字節輸出流copyFile(File input, OutputStream output)

String destFileName = "abc雪03.jpg";
//從文件copy to an字節輸出流。
FileUtils.copyFile(file, new FileOutputStream(new File(destFilePath,destFileName)));

拷貝文件到文件的目錄保存文件的日期copyFileToDirectory(File srcFile, File destDir)

拷貝的文件名無法自定義,和原文件名一樣

//拷貝文件到文件的目錄保持文件的日期。
FileUtils.copyFileToDirectory(file, new File(destFilePath));

 

1.3.拷貝目錄及文件

主要的API如下,包含拷貝目錄及目錄下的子目錄及文件的拷貝方法:

 

 ①將整個目錄拷貝到新位置,並保持原文件日期copyDirectory(File srcDir, File destDir)

     其包含文件及子目錄文件並保持原文件日期

File file = new File("E:\\java\\file01");
String destFilePath = "E:\\java\\file03";
try {
    //將整個目錄複製新位置,並保持原文件日期。
    FileUtils.copyDirectory(file, new File(destFilePath));
    System.out.println("文件目錄拷貝成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

 ②將已篩選的目錄拷貝到新位置

copyDirectory(File srcDir, File destDir, FileFilter filter)

文件過濾器篩選其包含文件及子目錄文件拷貝,並保持原文件日期。

String destFilePath = "E:\\java\\file04";
//將已篩選的目錄複製,並保持原文件日期的新位置。
FileUtils.copyDirectory(file, new File(destFilePath), new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        if(pathname.isDirectory()) return true;
        else {
            boolean b1 = pathname.getName().endsWith(".txt");
            boolean b2 = pathname.getName().endsWith(".jpg");
            return b1 || b2;
        }
    }
});

 

1.4.刪除目錄及文件

主要的刪除API方法如下,常用的有deleteDirectory、deleteQuietly及forceDelete等,主要用於級聯刪除及強制刪除,且不會引起異常。非常強力。

 ①刪除指定文件,從不引發異常deleteQuietly(File file)

File file = new File("E:\\java\\file04\\abc雪.jpg");
//刪除指定文件,從不引發異常。
FileUtils.deleteQuietly(file);

刪除指定文件,文件不存在拋出異常forceDelete(File file)

File file = new File("E:\\java\\file04\\abc雪.jpg");
try {
    FileUtils.forceDelete(file);
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

遞歸刪除目錄deleteDirectory(File directory)

刪除其包含文件及子目錄文件

File file = new File("E:\\java\\file04\\abc雪.jpg");
//遞歸刪除目錄。
try {
    FileUtils.deleteDirectory(new File(destFilePath));
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

1.5.清除目錄

主要的API如下,主要用於清除當前目錄下(不會刪除到當前目錄級別)的文件夾及其包含的文件。

 清除該目錄下的文件及子目錄文件而不刪除該目錄文件夾。該目錄不存在會報錯:

String destFilePath = "E:\\java\\file04";
try {
    FileUtils.cleanDirectory(new File(destFilePath));
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

1.6.文件大小計數常量

①EMPTY_FILE_ARRAY,空文件數組:

/**
   * An empty array of type {@code File}.
   */
public static final File[] EMPTY_FILE_ARRAY = {};

②1GB大小,分別對應long類型及BigInteger包裝類型

/**
   * The number of bytes in a gigabyte.
   */
public static final long ONE_GB = ONE_KB * ONE_MB;

 /**
    * The number of bytes in a gigabyte.
    *
    * @since 2.4
    */
public static final BigInteger ONE_GB_BI = ONE_KB_BI.multiply(ONE_MB_BI);

③同理KB與MB的顯示類型:

/**
     * The number of bytes in a kilobyte.
     */
public static final long ONE_KB = 1024;

/**
   * The number of bytes in a kilobyte.
   *
   * @since 2.4
   */
public static final BigInteger ONE_KB_BI = BigInteger.valueOf(ONE_KB);

/**
   * The number of bytes in a megabyte.
   */
public static final long ONE_MB = ONE_KB * ONE_KB;

 

 博文轉載至CSDN博客:

FileUtils工具類常用方法

基於博主博文我自己做了一小部分的知識補充,也非常感謝博主提供博文分享學習知識的平臺。

站在巨人的肩膀上,我們才能學到更多的知識~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章