1. 程式人生 > >apache的IO包中的FileUtils方法的使用

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