使用apache 的FileUtils處理文件的複製等操做

今日思語:春風很柔,夏風很烈,秋風清爽,東風凜冽,願你就是春夏秋冬的風~html

 

平時對一些文件進行操做,好比說寫文件,讀文件,複製一個文件等,使用原生File操做須要讀取源文件,生成流對象,再寫入一個新的文件中一系列過程,使用apache commons-io幫咱們封裝了這些實現,有些操做能夠很容易的使用它的api來實現。這裏使用2.6版本,javadoc參照commons-io-2.6java

一、pom依賴加入commons-iogit

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

二、經常使用API使用github

2.1 獲取文件apache

File fileA = FileUtils.getFile(testPath + "a.txt");
// 最終路徑爲入參拼接起來即testPath + "a.txt"
File fileAA = FileUtils.getFile(testPath, "a.txt");
// 獲取某個目錄下的文件,後面參數是拼接而成的
File fileAAA = FileUtils.getFile(new File(testPath), "a.txt");

2.2 獲取臨時目錄和用戶目錄api

// 獲取臨時目錄路徑
// 每種操做系統有所不一樣,Windows通常是C:\DOCUME~1\用戶~1\LOCALS~1\Temp,Solaris通常是:/var/tmp/,Linux和Mac OS X通常是:/tmp
// Windows的java.io.tmpdir屬性值能夠看環境變量->用戶變量中的TMP。
File tempDirectory = FileUtils.getTempDirectory();
String tempDirectoryPath = FileUtils.getTempDirectoryPath();
File userDirectory = FileUtils.getUserDirectory();
String userDirectoryPath = FileUtils.getUserDirectoryPath();
System.out.println(tempDirectoryPath + "  -  " + tempDirectory);
System.out.println(userDirectoryPath + "  -  " + userDirectory.getName());

2.3  建立文件數組

// 建立文件(實現與Unix上「 touch」實用程序相同的行爲。它會建立一個大小爲0的新文件,或者若是文件已經存在,則將其打開和關閉而不進行修改,而是更新文件的日期和時間。)
File fileD = new File(testPath + "d.txt");
FileUtils.touch(fileD);

2.4 寫內容到文件工具

// 寫文件
File fileB = new File(testPath + "b.txt");
if (!fileB.exists()) {
    fileB.createNewFile();
}
// 經過字節寫入文件
FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());
FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);
// 經過行寫入文件(覆蓋)
FileUtils.writeLines(fileB, Lists.newArrayList("春夏秋冬, 三餐四季,只願有你"));
// 經過行寫入文件(追加)
FileUtils.writeLines(fileB, Lists.newArrayList("春風很柔,夏風很烈,秋風清爽,東風凜冽,你就是春夏秋冬的風"), true);
// 字符串寫入,不換行追加
FileUtils.writeStringToFile(fileB, "惟美有你", "UTF-8", true);
FileUtils.writeStringToFile(fileB, "哪裏有你", Charset.defaultCharset(), true);
File fileC = new File(testPath + "c.txt");
if (!fileC.exists()) {
    fileC.createNewFile();
}
//  流操做
fileInputStream   = FileUtils.openInputStream(fileB);
//  fileOutputStream = FileUtils.openOutputStream(fileC);
fileOutputStream = FileUtils.openOutputStream(fileC, true);
// 字節數組
byte[] buffer = new byte[1024];
// 將文件內容寫到文件中
while (fileInputStream.read(buffer) != -1) {
    fileOutputStream.write(buffer);
}

2.5 讀取文件內容ui

// 按行讀取文件內容
List list = FileUtils.readLines(fileAAA, "UTF-8");
System.out.println(list.size() > 0 ? list.get(0) : "" + list.size());
List<String> lines = FileUtils.readLines(fileB, Charset.defaultCharset());
System.out.println(lines.size() > 0 ? lines.get(0) : "" + lines.size());
// 讀取文件內容爲字節
byte[] bytes = FileUtils.readFileToByteArray(fileB);
System.out.println(new String(bytes));
// 讀取文件爲String
String fileToString = FileUtils.readFileToString(fileB, "UTF-8");
System.out.println(fileToString);
String fileToString2 = FileUtils.readFileToString(fileB, Charset.defaultCharset());
System.out.println(fileToString2);

2.6 獲取目錄文件及目錄spa

// recursive是否遞歸查詢,這裏查詢.txt文件,也能夠指定其餘格式的,若是extensions爲null則查詢全部類型的文件
Collection<File> listFiles = FileUtils.listFiles(new File(testPath), null, true);
Collection<File> listFiles2 = FileUtils.listFiles(new File(testPath), new String[]{"txt"}, true);
// 獲取某個目錄下的全部文件 TrueFileFilter.INSTANCE表示匹配全部的
Collection<File> files1 = FileUtils.listFiles(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
// 獲取某個目錄下的全部文件和文件目錄 TrueFileFilter.INSTANCE表示匹配全部的
Collection<File> files2 = FileUtils.listFilesAndDirs(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);

2.7 文件內容比較

// 文件內容比較
boolean aa = FileUtils.contentEquals(fileA, fileAA);
boolean ab = FileUtils.contentEquals(fileA, fileB);

2.8 文件或目錄拷貝

// 文件複製,將文件A的內容複製給文件D
FileUtils.copyFile(fileA, fileD);
// 把文件複製到某個目錄下
FileUtils.copyFileToDirectory(fileD, new File(testPath + "inner"));
// 把某個目錄拷貝到另一個目錄
FileUtils.copyDirectoryToDirectory(new File(testPath + "inner"), new File(testPath + "other"));
// 把文件或目錄拷貝到指定目錄
FileUtils.copyToDirectory(fileB, new File(testPath + "inner"));
// 文件目錄複製
FileUtils.copyDirectory(new File(testPath + "inner"), new File(testPath + "first"));

2.9 文件或目錄刪除

// 刪除目錄
FileUtils.deleteDirectory(new File(testPath + "first"));
// 刪除文件或目錄
FileUtils.deleteQuietly(fileD);
FileUtils.deleteQuietly(new File(testPath + "first"));

以上是FileUtils工具類的一些經常使用操做API使用

 

Github源碼參照

相關文章
相關標籤/搜索