apache的IO包中的FileUtils方法的使用
首先非常感謝apache這個公司給我們免費開源了這個IO包,我們才能學習使用開發出我們想要的產品,知道這個包已經很多年了一直都是在用固定的幾個方法,對裡面很多方法都不會用,今天有空我就來研究試用下這裡的Api 順便也學習下高大上的技術,廢話不多說了,下面我就挨個的演示下FileUtils裡的所有方法。
IO包對應的版本和JDK版,我這裡用的是最新的版本也就是2.6版本
jar包自己去下載,下載dizh地址:
1、public static String byteCountToDisplaySize(final long size) {}
這個方法的作用:將檔案的位元組大小轉換成我們顯示的字串,比如1024轉換後1kb
以下是例子:
import org.apache.commons.io.FileUtils; public class FileUtilsTest { public static void main(String[] args) { String str = FileUtils.byteCountToDisplaySize(1024); String str1 = FileUtils.byteCountToDisplaySize(1024*1024); String str2 = FileUtils.byteCountToDisplaySize(1024*1024*1024); String str3 = FileUtils.byteCountToDisplaySize(1024*1024*1024); System.out.println("str= "+str); System.out.println("str1= "+str1); System.out.println("str2= "+str2); System.out.println("str3= "+str3); //執行結果如下: //str=1 KB //str1=1 MB //str2=1 GB //str3=1 GB } }
通過以上結果一目瞭然就能知道具體的用法了吧。
2、 public static String getTempDirectoryPath() {}
這個方法的作用:獲取系統的臨時目錄路徑
import org.apache.commons.io.FileUtils; public class FileUtilsTest { public static void main(String[] args) { //獲取系統的臨時目錄路徑 String s = FileUtils.getTempDirectoryPath(); System.out.println(s); //執行後的結果:C:\Users\ADMINI~1\AppData\Local\Temp\ } }
3、public static String getUserDirectoryPath() {
作用:獲取使用者的主目錄
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
//獲取使用者的主目錄路徑
String s = FileUtils.getUserDirectoryPath();
System.out.println(s);
//執行後的結果:C:\Users\Administrator
}
}
4、 public static long checksumCRC32(final File file) throws IOException {}
方法的作用:得到檔案的CRC32的值,用來校驗檔案是否是同一個檔案用的,類似於MD5
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import java.util.zip.CRC32;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
long csum = FileUtils.checksum(new File("C:\\Users\\Administrator\\Desktop\\Test.java"), new CRC32()).getValue();
System.out.println(csum);
//執行結果2421846926
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、public static boolean contentEquals(final File file1, final File file2) throws IOException {}
作用:比較兩個檔案的內容是否相同,相同返回true 不相同返回false
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\Test.java");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\T3st.java");
//比較兩個檔案的內容是否相同 相同返回true 不相同返回false
boolean isEquals = FileUtils.contentEquals(file1, file2);
System.out.println(isEquals);
//執行結果true
} catch (IOException e) {
e.printStackTrace();
}
}
}
6、public static boolean contentEqualsIgnoreEOL(final File file1, final File file2, final String charsetName){}
作用:比較兩個檔案的內容,忽略換行符,第三個引數編碼集
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\Test.java");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\T3st.java");
//比較兩個檔案的內容是否相同 相同返回true 不相同返回false
boolean isEquals = FileUtils.contentEqualsIgnoreEOL(file1, file2, "UTF-8");
System.out.println(isEquals);
//執行結果true
} catch (IOException e) {
e.printStackTrace();
}
}
}
7、public static void cleanDirectory(final File directory) throws IOException {}
作用: 清空資料夾中的所有檔案和子資料夾,資料夾本身不會被清除
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign");
//清空資料夾中的所有檔案和子資料夾,資料夾本身不會被清除
FileUtils.cleanDirectory(file2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
8、public static boolean isFileOlder(final File file, final Date date) {}
作用:判斷檔案是否在某個日期之後建立的,如果為真返回true 為假返回false
9、 public static boolean isFileNewer(final File file, final Date date) {}
作用:判斷檔案是否在某個日期之前建立的,如果為真返回true 為假返回false
package com.ptyt.io.demo;
import java.io.File;
import java.text.SimpleDateFormat;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\123.txt");
// 清空資料夾中的所有檔案和子資料夾,資料夾本身不會被清除
String string = "2018-07-10 10:00:00:023";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); // 最後三個大寫SSS代表毫秒,寫1個表示前邊都不補0,寫兩個只有是兩位0補全
boolean b = FileUtils.isFileOlder(file2, sdf.parse(string));
boolean b1 = FileUtils.isFileNewer(file2, sdf.parse(string));
System.out.println(b);
System.out.println(b1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
10、public static void deleteDirectory(final File directory) throws IOException {}
作用:刪除目錄裡的檔案和子資料夾,也會刪除目錄本身,和cleanDirectory的區別就是是否刪除目錄本身
例子:
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
//目錄和目錄裡的檔案和子資料夾
FileUtils.deleteDirectory(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
11、public static boolean deleteQuietly(final File file) {}
作用:刪除一個目錄或者一個檔案,如果這個目錄或者目錄不存在不會丟擲異常這個方法跟deleteDirectory的區別就是是否丟擲異常,deleteDirectory這中方式刪除時傳的目錄不存在或為空是會拋IO異常,deleteQuietly這種方式不會丟擲異常
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
////刪除一個目錄或者一個檔案,如果這個目錄或者目錄不存在不會丟擲異常
FileUtils.deleteQuietly(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
12、public static void forceDelete(final File file) throws IOException {}
作用:刪除目錄和檔案以及子目錄,但是這個目錄或檔案佔用是還是不會刪除的,測試後發現跟deleteDirectory() 跟這個方法一樣的,不要被這裡的force誤解了,檔案被其他程序佔用是你在刪除這個檔案還是會失敗的,不會強制刪除的。
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
FileUtils.forceDelete(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
13、public static void forceDeleteOnExit(final File file) throws IOException {}
例子:
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
//當JVM退出時,把file物件刪除。如果是目錄物件則遞迴刪除子目錄,跟delete的區別是一個是立馬執行 一個是JVM退出後執行 forceDeleteOnExit 這個用來刪除臨時檔案或快取檔案用的
FileUtils.forceDeleteOnExit(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
14、public static void moveDirectoryToDirectory(final File src, final File destDir, final boolean createDestDir)
throws IOException {}
作用:剪下目錄,第三個引數是否建立目錄
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign1\\");
FileUtils.moveDirectoryToDirectory(file1, file2, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
15、public static void touch(final File file) throws IOException {}
作用:建立檔案,如果檔案已經存在修改檔案的時間
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
FileUtils.touch(file1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
16、public static byte[] readFileToByteArray(final File file) throws IOException {}
作用:讀取檔案的內容到位元組數組裡
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
byte[] b =FileUtils.readFileToByteArray(file1);
System.out.println(new String(b,StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
}
17、 public static String readFileToString(final File file, final Charset encoding) throws IOException {}
作用:讀取檔案的內容轉換成字串
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
String str =FileUtils.readFileToString(file1,StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
18、public static List<String> readLines(final File file, final Charset encoding) throws IOException {}
public static List<String> readLines(final File file, final String encoding) throws IOException {}
作用:一行一行的讀取檔案裡的內容然後儲存到List<String> 裡.這兩個方法作用相同
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
List<String> strList =FileUtils.readLines(file1,StandardCharsets.UTF_8);
for(String str:strList){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
19、 public static void write(final File file, final CharSequence data, final Charset encoding, final boolean append){}
作用:寫一個字串或字元到檔案裡,第一個引數檔案物件,第二個引數寫入是資料 第三個引數編碼集 第四個引數是否追加到檔案的後面,true表示追加到後面 false表示覆蓋以前的內容
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
FileUtils.write(file1, "hello word!",StandardCharsets.UTF_8,false);
String str = FileUtils.readFileToString(file1, StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
20、public static void writeByteArrayToFile(final File file, final byte[] data, final boolean append){}
public static void writeByteArrayToFile(final File file, final byte[] data, final boolean append){}
public static void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len,
final boolean append) throws IOException {}
作用:寫位元組陣列到檔案裡,都是過載的方法,引數不一樣 功能都是相同的
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
byte b[] ="Hello words!".getBytes();
FileUtils.writeByteArrayToFile(file1, b, false);
String str = FileUtils.readFileToString(file1, StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
21、public static File toFile(final URL url) {}
作用:URL轉File,henj很簡單直接看例子
package com.ptyt.io.demo;
import java.io.File;
import java.net.URL;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
URL url = new URL("file:/C:/Users/Administrator/Desktop/sign/1.txt");
File file = FileUtils.toFile(url);
System.out.println(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
22、public static File getFile(final String... names) {}
public static File getFile(final File directory, final String... names) {} 過載的方法作用一樣。
作用:拼接路徑返回File物件,實際開發中我們總是為了/或\頭疼,拼接路徑要麼少/要麼多/ 這個方法專門geig給我們解決這個問題。
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH,"1","2","3","4","5","6","7","8","9","10");
System.out.println(file);
//執行後的結果
//C:\Users\Administrator\Desktop\sign\1\2\3\4\5\6\7\8\9\10
} catch (Exception e) {
e.printStackTrace();
}
}
}
執行後的結果 C:\Users\Administrator\Desktop\sign\1\2\3\4\5\6\7\8\9\10 以後我們再也不會為斜槓或反斜槓頭疼了,從此不會在這裡出bug了。
23、 public static Iterator<File> iterateFiles( final File directory, final String[] extensions, final boolean recursive) {}
public static Iterator<File> iterateFilesAndDirs(final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) {}
public static Iterator<File> iterateFiles( final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) {}
作用:遍歷某個目錄獲取目錄裡的檔案和資料夾,這三個介面也是IO包裡的核心說句實話tai太強大了,這裡一兩句話說不清楚有空開個專題要yanj研究的三個介面,這裡我簡單的舉個例子。
package com.ptyt.io.demo;
import java.io.File;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH);
Iterator<File> fileList = FileUtils.iterateFiles(file, new String[]{"txt"}, true);
while (fileList.hasNext()) {
File file1 = (File) fileList.next();
System.out.println(file1);
}
//執行後的結果
//C:\Users\Administrator\Desktop\sign\1\1.txt
//C:\Users\Administrator\Desktop\sign\1\3\3.txt
//C:\Users\Administrator\Desktop\sign\2.txt
} catch (Exception e) {
e.printStackTrace();
}
}
}
這個例子很簡單就是遍歷目錄下副檔名為txt的所有檔案,第三個引數是否遍歷子目錄,如果為true 遍歷整個子目錄 false不遍歷整個子目錄。
執行後的結果:
C:\Users\Administrator\Desktop\sign\1\1.txt
C:\Users\Administrator\Desktop\sign\1\3\3.txt
C:\Users\Administrator\Desktop\sign\2.txt
24、 public static FileInputStream openInputStream(final File file) throws IOException {}
public static FileOutputStream openOutputStream(final File file) throws IOException {}
public static FileOutputStream openOutputStream(final File file, final boolean append) throws IOException {}
作用:方便的開啟輸入輸出流,有java基礎的一看就懂(秒懂)傳統的java 開啟輸入輸出流chua建立File 再建立FileOutStream 傳進去也可以用 但是判斷sh是否是目錄是否為空的比較麻煩,這裡專門做了這些工作讓chen程式設計師用的更shua爽而已,舉個例子:
package com.ptyt.io.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH,"2.txt");
//開啟一個輸入流
FileInputStream fileInputStream = FileUtils.openInputStream(file);
//開啟一個輸出流
FileOutputStream outPutStream = FileUtils.openOutputStream(file);
//開啟一個內容追加的輸出流
FileOutputStream outPutStream1 = FileUtils.openOutputStream(file, true);
System.out.println(fileInputStream);
System.out.println(outPutStream);
System.out.println(outPutStream1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
得到 FileOutputStream和FileInputStream後剩下的工作交給程式設計師處理了你想寫檔案還是讀取檔案。
25、FileUtils裡的常量
舉例:
package com.ptyt.io.demo;
import java.math.BigInteger;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
long size = 0;
BigInteger bi =null;
size =FileUtils.ONE_KB;
bi =FileUtils.ONE_KB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_MB;
bi =FileUtils.ONE_MB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_GB;
bi =FileUtils.ONE_GB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_TB;
bi =FileUtils.ONE_TB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_PB;
bi = FileUtils.ONE_PB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_EB;
bi =FileUtils.ONE_EB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_ZB;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_YB;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_PB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
} catch (Exception e) {
e.printStackTrace();
}
}
}
執行結果:
1 KB 1 KB
1 MB 1 MB
1 GB 1 GB
1 TB 1 TB
1 PB 1 PB
1 EB 1 EB
1024 EB
1048576 EB
1 PB