Java中File文件類之文件過濾器

文件過濾器

文件過濾器是個接口
過濾器一:File[] listFiles(FileFilter filter) 

    public static void fun1() {
        // 測試過濾器(FileFilter)
        File file = new File("/Users/lanou/Desktop/level");
        // 使用重載 的 listFiles 方法
        File[] listFiles = file.listFiles(new MyFilter());
        for (File file2 : listFiles) {
            System.out.println(file2.getName());
        }
    }

// 編寫自定義的類 實現過濾器藉口
class MyFilter implements FileFilter{
    // 按規則過濾文件,過濾文件時 返回false就被過濾 返回true保留
    @Override
    public boolean accept(File pathname) {
        if (pathname.isDirectory()) {
            return false;
        }
        return true;
    }   
}

// 過濾TXT文件
class MyFilterTXT implements FileFilter{

    @Override
    public boolean accept(File pathname) {
        // 這麼寫相當於 所有第一級的文件都判斷了一下 後綴是不是txt
        // 文件夾也在當中被判斷 然後被過濾掉了
        // 判斷是文件夾直接返回true
        if (pathname.isDirectory()) {
            return true;
        }
        return pathname.getName().endsWith("txt");
    }   
}

    // 通過過濾器 遍歷打印文件夾中的所有txt文件
    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFilterTXT());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/level");
        getTXTFile(file);
    }
過濾器二:File[] listFiles(FilenameFilter filter)

// 測試過濾器(FilenameFilter) 
class MyFileNameFilter implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        /*
         * 參數1: 傳進來的文件夾根路徑
         * 參數2: 該路徑下的文件的名字和文件夾的名字
         */
        // 利用這兩個參數創建一個文件對象出來
        File file = new File(dir, name);
        System.out.println(file);
        return false;
    }
}
    // 遍歷所有文件
    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

// 通過FilenameFilter過濾器獲取指定目錄中小於200K的小文件
class MyFileNameFilterLength implements FilenameFilter {

    @Override
    public boolean accept(File dir, String name) {
        File file = new File(dir, name);
        // 過濾隱藏文件
        if (file.isHidden()) {
            return false;
        }
        // 文件夾不過濾
        if (file.isDirectory()) {
            return true;
        }
        return file.length() < 200 *1024;
    }   
}

    public static void getTXTFile(File file) {
        File[] listFiles = file.listFiles(new MyFileNameFilterLength());
        for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                getTXTFile(subFile);
            } else {
                System.out.println(subFile.getName());
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/level");
        getTXTFile(file);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章