Apache-Commons-FileIOUtils工具类常用方法使用
一、導入依賴
1.1、Maven項目
mavne依賴
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version> </dependency>1.2、Java項目
1、下載依賴
訪問Apache官網:https://www.apache.org/
翻到最下面,找到Commons,點進去
然后在下面表格里找到IO,并點擊進入
這里下載最新版本,JDK版本必須為Java8
這里選擇.zip結尾的,上面那個是Linux系統下載的
下載好后解壓,就會有一個目錄,只需要把圈出來的jar包導入到項目里即可
2、導入依賴
打開Idea,點擊左上角的項目,然后點擊Project Structure...,打開項目資源
然后點擊左側的Libraries,然后點擊+號,再選擇Java
在文件夾里找到我們的jar包,然后選擇則,點擊OK
當項目里出現這個文件,就代表著導入成功了
二、API文檔查看步驟
打開下載的文件的docs目錄,里面存放著所有api的文檔,然后打開index.html頁面
然后找到我們下載的包io
進入IO后,我們找到本次學習的FileUtils類,點擊進入
然后就會看到里面所有的方法等等
三、文件常用API使用
這里大概分了幾種類型方便查找使用
這里為了方便觀看,所有異常直接拋出
1、操作步驟目錄和文件都包含的
(1)將一個文件拷貝到某個目錄下
copyFileToDirectory:將一個文件拷貝到某個目錄下(目標目錄不存在就會創建)
準備
在test目錄里創建aaa.txt文件
開始
將文件復制到不存在的aaa目錄里
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileUtils.copyFileToDirectory(new File("d:/test/aaa.txt"),new File("d:/test/aaa"));} }-
結果(創建了目錄aaa,并粘貼了文件)
(2)列出指定目錄下的所有文件(可過濾)
listFiles:列出指定目錄下的所有文件(可過濾子目錄)
準備
在test目錄里創建兩個目錄,兩個文件
在兩個目錄里分別創建兩個文件
開始
遍歷test目錄及其子目錄下所有文件
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的過濾器* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return true;}}, new IOFileFilter() {/*** 子目錄過濾器,可以過濾子目錄* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return true;}});for (File file : files) {System.out.println(file.toString());}} }-
結果
遍歷test目錄下除了ccc.html文件的所有文件
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的過濾器* @param file* @return*/@Overridepublic boolean accept(File file) {// 如果文件名稱是以html結尾的,則攔截if(file.getName().endsWith("html")){return false;}return true;}@Overridepublic boolean accept(File file, String s) {return false;}}, new IOFileFilter() {/*** 子目錄過濾器,可以過濾子目錄* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return false;}});for (File file : files) {System.out.println(file.toString());}} }-
結果
遍歷test目錄下除了aaa目錄下的所有文件
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的過濾器* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return false;}}, new IOFileFilter() {/*** 子目錄過濾器,可以過濾子目錄* @param file* @return*/@Overridepublic boolean accept(File file) {/*** 如果文件名是aaa,那么就攔截不遍歷其下所有文件*/if("aaa".equals(file.getName())){return false;}return true;}@Overridepublic boolean accept(File file, String s) {return false;}});for (File file : files) {System.out.println(file.toString());}} }-
結果
(3)返回文件/目錄的大小
sizeOf:返回文件/目錄的大小
準備
在test目錄下,創建aaa.txt文件,里面輸入測試數據,并且右鍵查看文件大小,記住文件字節大小
在test里再創建一個bbb目錄,然后在里面新建bbb.txt文件,里面輸入測試內容,并且查看字節大小
開始
獲取aaa.txt文件以及bbb目錄的大小
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection; import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {long l1 = FileUtils.sizeOf(new File("d:/test/aaa.txt"));long l2 = FileUtils.sizeOf(new File("d:/test/bbb/bbb.txt"));System.out.println("文件大小:" + l1); // 文件大小:5518System.out.println("目錄大小:" + l2); // 目錄大小:11038} }-
結果
2、操作目錄的
(1)清空目錄,但不刪除目錄
cleanDirectory:清空目錄,但不刪除目錄
準備工作:
先在D盤下創建test目錄,然后在里面新建一個目錄,兩個文件, 用來測試
開始使用
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {/*** 清空目錄,但不刪除目錄*/FileUtils.cleanDirectory(new File("d:/test"));} }-
結果
(2)拷貝目錄(可過濾)
copyDirectory:將一個目錄內容拷貝到另一個目錄,只拷貝內容,可以通過FileFliter過濾需要拷貝的文件
準備步驟
在test文件夾里創建一個abc目錄,再創建一個aaa.txt文件,一個bbb.html文件
開始使用
只把不為html結尾的文件拷貝過去
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {/*** 清空目錄,但不刪除目錄*/FileUtils.copyDirectory(new File("d:/test"), new File("c:/"), new FileFilter() {/*** 每個操作的文件都會走這個accept方法* 只有返回true,才能走完代碼,為false則攔截* @param pathname* @return*/@Overridepublic boolean accept(File pathname) {if(!pathname.toString().endsWith("html")){return true;}return false;}});} }-
結果
(3)刪除目錄
deleteDirectory:刪除目錄
準備
在test文件夾里創建aaa目錄
開始
將剛創建的aaa目錄刪除
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileUtils.deleteDirectory(new File("d:/test/aaa"));} }-
結果
3、操作文件的
(1)比較兩個文件的內容是否相同
contentEquals:比較兩個文件的內容是否相同
準備工作
在D盤下test目錄里創建兩個內容一樣的文件,里面寫入相同的內容
在test目錄里創建兩個內容不一樣的文件,里面寫入不相同的內容
開始使用
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {/*** 清空目錄,但不刪除目錄*/boolean f1 = FileUtils.contentEquals(new File("d:/test/a1.txt"), new File("d:/test/a2.txt"));boolean f2 = FileUtils.contentEquals(new File("d:/test/b1.txt"), new File("d:/test/b2.txt"));System.out.println(f1); // true;System.out.println(f2); // false;} }-
結果
(2)將文件拷貝到新地址
copyFile:將一個文件內容拷貝到一個新的地址
準備
在D盤下test目錄里創建aaa.txt文件
開始
將指定的文件復制到D盤test目錄里不存在的文件bbb.txt(會自動創建)
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileUtils.copyFile(new File("d:/test/aaa.txt"),new File("d:/test/bbb.txt"));} }-
結果(創建了文件bbb.txt并把內容粘貼了進去)
(2)將文件拷貝到新地址
(3)將一個輸入流的內容拷貝到某個文件
copyInputStreamToFile:將一個輸入流的內容拷貝到某個文件(目錄不存在就會創建)
準備
在test目錄里創建aaa.txt文件
開始
使用輸入流讀取文件,然后拷貝到不存在的目錄aaa里
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileUtils.copyInputStreamToFile(new FileInputStream("d:/test/aaa.txt"),new File("d:/test/aaa/bbb.txt"));} }-
結果
(4)刪除文件
deleteQuietly:刪除文件
準備
在test目錄里創建文件aaa.txt
開始
將創建的文件刪除
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileUtils.deleteQuietly(new File("d:/test/aaa.txt"));} }-
結果
(5)打開文件的輸入流
openInputStream:打開指定文件的輸入流
準備
在test目錄下創建aaa.txt文件
使用
打開aaa文件的輸入流
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {FileInputStream fis = FileUtils.openInputStream(new File("d:/test/aaa.txt"));} }(6)將文件內容作為字符串返回
readFileToString:將文件內容作為字符串返回(自帶換行)
準備
在test目錄里創建aaa.txt文件,然后在里面編寫一些測試內容
使用
讀取aaa.txt文件內容
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String s = FileUtils.readFileToString(new File("d:/test/aaa.txt"), "utf-8");System.out.println(s);} }-
結果
(7)將文件內容按行返回到字符串數組中
readLines:將文件內容按行返回到字符串數組中
準備
在test目錄下創建aaa.txt文件,然后在里面編寫點測試內容
開始
按行讀取aaa.txt文件里面的內容
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection; import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {List<String> s = FileUtils.readLines(new File("d:/test/aaa.txt"),"utf-8");for (String s1 : s) {System.out.println(s1);}} }-
結果
(8)將字符串內容寫到文件中
writeStringToFile:將字符串內容直接寫到文件中(文件沒有自動創建)
開始
將我是張三aaa換行輸出到不存在的aaa.txt文件中
package com.tcc.test;import com.tcc.entity.User; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*; import java.util.Collection; import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {// \t\n實現換行FileUtils.writeStringToFile(new File("d:/test/aaa.txt"),"我是張三\t\naaa","utf-8");} }-
結果
四、IO流常用API使用
1、操作兩種流(IO)的
(1)、轉為緩沖流
buffer():將傳入的流轉為緩沖流,并且可以通過參數指定緩沖大小
使用
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url = "d:/test/aaa.txt";// 轉為字節輸入流包裝流BufferedInputStream bis1 = IOUtils.buffer(new FileInputStream(url));BufferedInputStream bis2 = IOUtils.buffer(new FileInputStream(url),1024); // 指定緩沖大小// 轉為字節輸出流包裝流BufferedOutputStream bos1 = IOUtils.buffer(new FileOutputStream(url));BufferedOutputStream bos2 = IOUtils.buffer(new FileOutputStream(url),1024); // 指定緩沖大小// 轉為字符輸入流包裝流BufferedReader br1 = IOUtils.buffer(new FileReader(url));BufferedReader br2 = IOUtils.buffer(new FileReader(url),1024); // 指定緩沖大小// 轉為字符輸出流包裝流BufferedWriter bw1 = IOUtils.buffer(new FileWriter(url));BufferedWriter bw2 = IOUtils.buffer(new FileWriter(url),1024);} }(2)、關閉流
closeQuietly():關閉打開的流
使用
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url = "d:/test/aaa.txt";FileInputStream fis = new FileInputStream(url);// 關閉流IOUtils.closeQuietly(fis);} }(3)、比較流中內容
contentEquals():比較流中內容是否相等,相等返回true,反之為false
準備
使用
比較兩個文本中的內容是否相等
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String url2 = "d:/test/bbb.txt";// 比較字節流FileInputStream fis1 = new FileInputStream(url1);FileInputStream fis2 = new FileInputStream(url2);boolean b = IOUtils.contentEquals(fis1, fis2);System.out.println(b); // true;// 比較字符流FileReader fr1 = new FileReader(url1);FileReader fr2 = new FileReader(url2);boolean b2 = IOUtils.contentEquals(fis1, fis2);System.out.println(b2); // true;} }(4)拷貝
copy():將輸入流中內容拷貝到輸出流中,并可以指定字符編碼
準備
開始
將aaa.txt,拷貝到當前目錄,名字為bbb.txt
最好使用字節流當做參數,其他流使用有坑,字符流的粘貼不過來內容
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String url2 = "d:/test/bbb.txt";// 字節流輸出到字節流,返回值為文本大小int fileSize = IOUtils.copy(new FileInputStream(url1), new FileOutputStream(url2));System.out.println(fileSize); // 17} }(5)拷貝(大于2G)
copyLarge():拷貝內容,適合大于2G的內容,使用了緩沖流
準備
準備一個比較大的文本或者圖片
開始
將上面文件拷貝一份,查看運行速度
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/testPic.png";String url2 = "d:/test/testPic2.png";// 拷貝字節流內容,返回文件大小 執行很快long l = IOUtils.copyLarge(new FileInputStream(url1), new FileOutputStream(url2));System.out.println(l); // 20673353} }2、操作輸入流的
(1)、返回迭代器
lineIterator():返回可以迭代每一行的迭代器
準備
開始
package com.tcc.test;import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";LineIterator lineIterator = IOUtils.lineIterator(new FileInputStream(url1), "utf-8"); // System.out.println(lineIterator.next()); // 我是張三/*** 我是張三* aaa*/while (lineIterator.hasNext()){System.out.println(lineIterator.next());}} }(2)、將輸入流中的內容轉為字符串
toString():將輸入流中的內容轉為字符串
準備
開始
讀取文本里面內容
package com.tcc.test;import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String s = IOUtils.toString(new FileInputStream(url1), "utf-8");System.out.println(s); // 我是張三 aaa} }(3)內容轉為字節/字符數組
toByteArray():轉為字節數組 toCharArray:轉為字符數組
開始
package com.tcc.test;import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";/*** -26* -120* -111* -26* -104* -81* -26* -99* -114* -27* -101* -101*/byte[] bytes = IOUtils.toByteArray(new FileInputStream(url1));for (byte aByte : bytes) {System.out.println(aByte);}/*** 我* 是* 李* 四*/char[] chars = IOUtils.toCharArray(new FileInputStream(url1),"utf-8");for (char aChar : chars) {System.out.println(aChar);}} }結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-46stNOFP-1665813842283)(img/1665813756045.png)]
3、操作輸出流的
(1)、向流中寫入內容
write():向流中寫入內容,但會替換原來的內容
準備
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-U5Gbe857-1665813842283)(img/1665797968219.png)]
開始
package com.tcc.test;import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/ public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";IOUtils.write("我是李四",new FileOutputStream(url1),"utf-8");} }[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mcds30Zr-1665813842284)(img/1665798923237.png)]
總結
以上是生活随笔為你收集整理的Apache-Commons-FileIOUtils工具类常用方法使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx + PHP(php-fpm
- 下一篇: 斯坦佛编程教程-Unix编程工具(五)