您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么用apache的FileUtils處理文件的復制等操作方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用apache的FileUtils處理文件的復制等操作方式”吧!
平時對一些文件進行操作,比如說寫文件,讀文件,復制一個文件等,使用原生File操作需要讀取源文件,生成流對象,再寫入一個新的文件中一系列過程,使用apache commons-io幫我們封裝了這些實現,有些操作可以很容易的使用它的api來實現。
這里使用2.6版本,javadoc參照commons-io-2.6
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
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");
// 獲取臨時目錄路徑 // 每種操作系統有所不同,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());
// 創建文件(實現與Unix上“ touch”實用程序相同的行為。它會創建一個大小為0的新文件,或者如果文件已經存在,則將其打開和關閉而不進行修改,而是更新文件的日期和時間。) File fileD = new File(testPath + "d.txt"); FileUtils.touch(fileD);
// 寫文件 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); }
// 按行讀取文件內容 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);
// 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);
// 文件內容比較 boolean aa = FileUtils.contentEquals(fileA, fileAA); boolean ab = FileUtils.contentEquals(fileA, fileB);
// 文件復制,將文件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"));
// 刪除目錄 FileUtils.deleteDirectory(new File(testPath + "first")); // 刪除文件或目錄 FileUtils.deleteQuietly(fileD); FileUtils.deleteQuietly(new File(testPath + "first"));
這就是FileUtils工具類的一些常用操作API使用。
Github源碼參照
一般的方法,我們要復制一個文件,可能需要讀取源文件,生成流對象,再寫入一個新的文件中,使用apache commons-io很容就可以處理文件的復制。
下面的例子演示我們怎樣使用FileUtils.copyFile方法在同一個文件夾復制文件和使用FileUtils.copyFileToDirectory方法復制到指定的文件夾中。其中System.getProperty("java.io.tmpdir")為通過JVM讀取java.io.tmpdir屬性取得臨時文件夾,每種操作系統有所不同,Windows一般是C:\DOCUME~1\用戶~1\LOCALS~1\Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp,Windows的java.io.tmpdir屬性值可以看環境變量->用戶變量中的TMP。
當然我們一般使用的是絕對或相對路徑,如要復制到F:\ajava目錄中,我們只需將targetDir改成File targetDir = new File("F:\\ajava");運行后就可以看到結果。
package ajava.sample.apache; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class AjavaFileCopyExample { public static void main(String[] args) { // 源File對象 File source = new File("ajava.txt"); // 備份的File對象 File target = new File("ajava-backup.txt"); //通過JVM讀取java.io.tmpdir屬性取得臨時文件夾 File targetDir = new File(System.getProperty("java.io.tmpdir")); try { //在同一個文件夾復制文件 System.out.println("復制 " + source + " 文件到 " + target); FileUtils.copyFile(source, target); // 根據指定的文件夾復制 System.out.println("復制 " + source + " 文件到" + targetDir + "目錄"); FileUtils.copyFileToDirectory(source, targetDir); } catch (IOException e) { // Errors will be reported here if any error occures during copying // the file e.printStackTrace(); } } }
輸出結果為:
復制 ajava.txt 文件到 ajava-backup.txt
復制 ajava.txt 文件到C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp目錄
再查看對應的文件夾,就可以發現備份文件。
到此,相信大家對“怎么用apache的FileUtils處理文件的復制等操作方式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。