天天看點

org.apache.commons.io包中的FileUtils檔案工具類詳細介紹

FileUtils類的應用

  1. 寫入一個檔案;
  2. 從檔案中讀取;
  3. 建立一個檔案夾,包括檔案夾;
  4. 複制檔案和檔案夾;
  5. 删除檔案和檔案夾;
  6. 從URL位址中擷取檔案;
  7. 通過檔案過濾器和擴充名列出檔案和檔案夾;
  8. 比較檔案内容;
  9. 檔案最後的修改時間;
  10. 計算校驗和。

一、 複制檔案或檔案夾方法:

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);
           

來源于:

https://www.cnblogs.com/gdwkong/p/7105823.html