org.apache.commons.io包中的FileUtils檔案工具類詳細介紹
阿新 • • 發佈:2018-12-07
FileUtils類的應用
- 寫入一個檔案;
- 從檔案中讀取;
- 建立一個資料夾,包括資料夾;
- 複製檔案和資料夾;
- 刪除檔案和資料夾;
- 從URL地址中獲取檔案;
- 通過檔案過濾器和副檔名列出檔案和資料夾;
- 比較檔案內容;
- 檔案最後的修改時間;
- 計算校驗和。
一、 複製檔案或資料夾方法:
public class CopyFileorDirectory { public static void main(String[] args) throws Exception { File file1 =new File("path1"); File file2 =new File("path2"); File file3 =new File("path3"); File file4 =new File("path4"); File file5 =new File("path5"); //將檔案複製到指定資料夾中,儲存檔案日期的時間。 // 該方法將指定原始檔的內容複製到指定目標目錄中相同名稱的檔案中。 // 如果不存在,則建立目標目錄。如果目標檔案存在,則該方法將覆蓋它。 FileUtils.copyFileToDirectory(file1,file2);//檔案不重命 //將檔案複製到一個新的地方(重新命名檔案)並儲存檔案日期的時間。 FileUtils.copyFile(file1,file3); //複製資料夾到指定目錄下,如果指定目錄不存在則建立 FileUtils.copyDirectoryToDirectory(file2,file4); //複製資料夾到指定目錄下並重命名 FileUtils.copyDirectory(file4,file5); //該方法將指定的源目錄結構複製到指定的目標目錄中。 FileUtils.copyDirectory(file4,file5, DirectoryFileFilter.DIRECTORY); // 複製資料夾下第一級內容中指定字尾檔案 IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt"); IOFileFilter txtFiles = FileFilterUtils.and(FileFileFilter.FILE, txtSuffixFilter); FileUtils.copyDirectory(file4,file5, txtFiles); // 複製檔案目錄結構及資料夾下第一級目錄內指定字尾檔案 FileFilter filter = FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, txtFiles); FileUtils.copyDirectory(file4,file5, filter,false);//preserveFileDate引數預設為true。 //將位元組從URL源複製到檔案目的地。如果它們還不存在,則將建立到目的地的目錄。如果已經存在,檔案將被覆蓋。 URL source = new URL("http://imgsrc.baidu.com/baike/pic/ewe.jpg"); FileUtils.copyURLToFile(source,file5,1000,1000); // 等待NFS傳播檔案建立,並強制執行超時。該方法重複測試File.exists(),直到它返回true,或直到秒內指定的最大時間。 File file = new File("/abc/"); boolean d = FileUtils.waitFor(file,100); System.out.println(d); } }
二、刪除檔案或檔案方法
public class FileorDirectoryDelete { public static void main(String[] args) throws Exception{ File file = new File("path1"); File directory = new File("path2"); //遞迴刪除一個目錄(包括內容)。 FileUtils.deleteDirectory(directory); //刪除一個檔案,不會丟擲異常。如果檔案是一個目錄,刪除它和所有子目錄。 FileUtils.deleteQuietly(file); //清理內容而不刪除它。 FileUtils.cleanDirectory(directory); //刪除一個檔案,會丟擲異常 //如果file是資料夾,就刪除資料夾及資料夾裡面所有的內容。如果file是檔案,就刪除。 //如果某個檔案/資料夾由於某些原因無法被刪除,會丟擲異常 FileUtils.forceDelete(file); } }
三、建立目錄
public class CreatDirectory { public static void main(String[] args) throws Exception { File file = new File("path"); //建立一個資料夾,如果由於某些原因導致不能建立,則丟擲異常 //一次可以建立單級或者多級目錄 FileUtils.forceMkdir(new File("/Users/wuguibin/Downloads/folder")); //為指定檔案建立檔案的父級目錄 FileUtils.forceMkdirParent(file); } }
四、移動檔案或資料夾
//移動資料夾,並重新命名
FileUtils.moveDirectory(new File("/Users/Downloads/file1"),
new File("/Users/Downloads/file2/file3"));
//移動資料夾,並給定是否重新命名
FileUtils.moveDirectoryToDirectory(new File("/Users/Downloads/file1"),
new File("/Users/Downloads/file2/"),false);
//移動檔案到指定資料夾中,並重新命名
FileUtils.moveFile(file1,new File("/Users/Downloads/海葡萄.jpen"));
//移動檔案到指定資料夾中,並給定是否建立資料夾
FileUtils.moveFileToDirectory(new File("/Users/Downloads/海葡萄.jpeg"),
new File("/Users/Downloads/file2"),false);
五、判斷檔案是否相同或包含關係、獲取檔案或資料夾大小
//確定父目錄是否包含指定子元素(一個檔案或目錄)。即directory是否包含file2,在比較之前,檔案是標準化的。
boolean a = FileUtils.directoryContains(directory,file2);
//比較兩個檔案的內容,以確定它們是否相同。
boolean b = FileUtils.contentEquals(file1, file2)
//獲取指定檔案或資料夾大小,有可能溢位,變為負值
long l = FileUtils.sizeOf(file1);
System.out.println(l+"KB");
//獲取指定檔案或資料夾大小,不溢位
BigInteger bi= FileUtils.sizeOfAsBigInteger(file1);
System.out.println(bi+"kb");
//遞迴地計算一個目錄的大小(所有檔案的長度的總和)。
//注意,sizeOfDirectory()沒有檢測溢位,如果溢位發生,返回值可能為負。sizeOfDirectoryAsBigInteger()方法則不溢位。
FileUtils.sizeOfDirectory(file1);
FileUtils.sizeOfDirectoryAsBigInteger(file1);
六、比較檔案新舊
//比較指定檔案是否比參考檔案建立或修改後時間晚
boolean b = FileUtils.isFileNewer(file1,file2));
//如果指定的檔案比指定的日期更新。
SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
String date1 = "2017/06/20";
boolean c = FileUtils.isFileNewer(file1,date.parse(date1));
boolean d = FileUtils.isFileNewer(file1,23243);
//指定檔案建立或修改後的時間是否比參考檔案或日期早
FileUtils.isFileOlder(file1,232434);
FileUtils.isFileOlder(file1,System.currentTimeMillis());
七、寫入檔案
//把集合裡面的內容寫入檔案,以指定字串結束寫入
//void writeLines(File file,Collection<?> lines,String lineEnding,boolean append)
ArrayList<String> list = new ArrayList<>();
String str1 = "Java";
String str2 = "JSP";
list.add(str1);
list.add(str2);
FileUtils.writeLines(file8,"GBK",list,"java",true);
//把字串寫入檔案
//引數1:需要寫入的檔案,如果檔案不存在,將自動建立。 引數2:需要寫入的內容
//引數3:編碼格式 引數4:是否為追加模式( ture: 追加模式,把字串追加到原內容後面)
String data1 = "認真";
FileUtils.writeStringToFile(file,data1, "UTF-8", true);
//把位元組陣列寫入檔案
byte [] buf = {13,123,34};
System.out.println(new String(buf));
FileUtils.writeByteArrayToFile(file13,buf,0,buf.length,true);
八、讀取檔案及獲取輸入輸出流
//將檔案的內容讀入一個字串中。
String str = FileUtils.readFileToString(file,"UTF-16" );
FileUtils.readFileToByteArray(file);
//把檔案讀取到位元組數組裡面
byte[] readFileToByteArray(final File file)
//把檔案讀取成字串 ;Charset encoding:編碼格式
String readFileToString(final File file, final Charset encoding)
//把檔案讀取成字串集合 ;Charset encoding:編碼格式
List<String> list4 =FileUtils.readLines(
new File("/Users/Shared/筆記/java.txt"),"UTF-8");
Iterator it = list4.iterator();
while (it.hasNext()){
Object obj=it.next();
System.out.println(obj);
}
//獲取輸入流
FileUtils.openInputStream(file);
//獲取輸出流
FileUtils.openOutputStream(file);
來源於: