1. 程式人生 > 實用技巧 >File 類基礎解析3 檔案過濾器優化

File 類基礎解析3 檔案過濾器優化

File類基礎解析3 檔案過濾器優化

什麼是檔案過濾器?

java.io.FileFilter 是一個介面,是File的過濾器。 該介面的物件可以傳遞給File類的 listFiles(FileFilter) 作為引數, 介面中只有一個方法
boolean accept(File pathname) :測試pathname是否應該包含在當前File目錄中,符合則返回true

簡單的分析

  1. 介面作為引數,需要傳遞子類物件,重寫其中方法。我們選擇匿名內部類方式,比較簡單。
  2. accept 方法,引數為File,表示當前File下所有的子檔案和子目錄。保留住則返回true,過濾掉則返回 false。保留規則:
    1. 要麼是.java檔案。
    2. 要麼是目錄,用於繼續遍歷。
  3. 通過過濾器的作用, listFiles(FileFilter) 返回的陣列元素中,子檔案物件都是符合條件的,可以直接列印
package File;
import java.io.File;
import java.io.FileFilter;

public class Main {
    public static void main(String[] args) {
        //要遍歷的資料夾的根目錄
        String rootpath="D:\\test";
        File file = new File(rootpath);
        printDir(file);
    }
    public  static  void printDir(File dir){
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".png")||pathname.isDirectory();
            }
        });
        for (File file : files) {
            if (file.isDirectory()){
                printDir(file);
            }
            else{
                System.out.println("檔案絕對路徑:"+file.getAbsolutePath());
            }
        }
    }
}

Lambda表示式簡化

package File;
import java.io.File;
public class Main {
    public static void main(String[] args) {
        //要遍歷的資料夾的根目錄
        String rootpath="D:\\test";
        File file = new File(rootpath);
        printDir(file);
    }
    public  static  void printDir(File dir){
        File[] files = dir.listFiles(pathname -> {
            return  pathname.getName().endsWith(".png")
                    ||pathname.isDirectory();});

        for (File file : files) {
            if (file.isDirectory()){
                printDir(file);
            }
            else{
                System.out.println("檔案絕對路徑:"+file.getAbsolutePath());
            }
        }
    }
}

以上就是過濾器的一些基礎知識,如有錯誤請各位批評指正,喜歡我的文章可以點個贊收藏,