1. 程式人生 > >File相關工具類簡介及應用

File相關工具類簡介及應用

 查找出目錄下的檔案,並設定過濾規則

public class FileTest{

    public void test() throws ParseException {
        // 查出路徑下的目錄
        File directory = new File("D:\\test\\file");
        // 目錄下的檔案集合
        File[] fs = directory.listFiles();
        // 定義過濾規則規則(建立過濾器)
        Date date = DateUtils.parseDate("2018-12-05 13:25:16", new String[]{"yyyy-MM-dd HH:mm:ss"});
        // FileFilterUtils.and(IOFileFilter... filters),可傳遞多個過濾條件
        IOFileFilter filefilter = FileFilterUtils.and(FileFilterUtils.fileFileFilter(),
                FileFilterUtils.suffixFileFilter(".txt"), FileFilterUtils.ageFileFilter(date, false));

        // 過濾後的檔案集合
        File[] files = FileFilterUtils.filter(filefilter, fs);
        if (files.length > 0) {
            // doSomting...
        }
    }
}

 

【一】File filter的作用

有時候,當我們在操作File物件時,只想針對某些特定的型別或者具備特定屬性的檔案。例如:只顯示java檔案,只顯示目錄,只顯示檔案....。在JDK中已經提供了這樣的工具,我們稱為File filter和Filename filter。

Apache commons IO對這個介面進行了擴充套件。



在此之下,衍生出了許多各種各樣的過濾器。它們可以分為兩大類:
 ①實質性過濾器:例如針對檔案的型別,屬性,名稱,大小進行過濾的過濾器
 ②過濾器聯結器:典型的包括AndFileFilter、OrFileFilter。用於邏輯連線多個過濾器

Apache commons IO為這麼多名目繁多的過濾器提供了一個工具類:FileFilterUtils


【二】FileFilterUtils簡介

FileFilterUtils提供了一系列的靜態方法,用於返回各種型別的過濾器,並組織它們。例如我需要過濾所有以"txt"結尾的檔案,不包括目錄,那麼使用FileFilterUtils,我可以這樣寫:

IOFileFilter fileOnlyFilter = FileFilterUtils.fileFileFilter();
IOFileFilter subfixFilter = FileFilterUtils.subfixFilter("txt");
IOFileFilter txtFileFilter = FileFilterUtils.andFileFilter(fileOnlyFilter, subfixFilter);