Java(File類之listFiles)


一.listFiles

在File類中有兩個和ListFiles重載的方法,方法的參數傳遞的就是過濾器

第一種

File[] listFiles(FileFilter filter)
    java.io.FileFilter接口:用於抽象路徑名(File對象)的過濾器,
        作用:用來過濾文件的方法
        抽象方法:
            boolean accept(File pathname)測試指定抽象路徑名是否包含再某個路徑名列表中
            參數:
                File pathname:使用ListFiles方法遍歷目錄,得到的每一個文件對象

第二種

File[] listFiles(FilenameFilter filter)實現此接口的類實例可用於過濾文件名
java.io.FilenameFilter接口:文件名過濾器
  作用:用於過濾文件名稱
  抽象方法:
  boolean accept(File dir,String name)測試指定文件是否包含在某一文件列表中
      參數:
          File dir:構造方法中傳遞的被遍歷的目錄
          String name:遍歷目錄獲取的每一個文件/文件夾的名稱

注意事項

兩個過濾器接口是沒有實現類的,需要我們自己寫實現類,重寫過濾的方法accept,
在方法中自定義過濾的規則

二.案例

2.1 普通版

    public static void main(String[] args) {
        File file = new File("G:\\");
        getAllFile(file);

    }
    /**
     * 定義一個方法,對目錄進行遍歷
     * @param dir File類型的目錄
     */
    public static void getAllFile(File dir){
        File[] files = dir.listFiles(new FileFilterImpl());//傳遞過濾器對象
        for (File f : files) {
            if (f.isDirectory()){//是文件夾繼續遍歷
                getAllFile(f);
            }else {//不是文件夾則輸出
                System.out.println(f);
            }
        }
    }

/**
 * 創建過濾器FileFilter的實現類,重寫accept
 */
public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        //如果是文件夾,繼續遍歷
        if (pathname.isDirectory()){
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");
    }
}

2.2 升級版

 public static void main(String[] args) {
        File file = new File("G:\\");
        getAllFile(file);

    }

    /**
     * 定義一個方法,對目錄進行遍歷
     *
     * @param dir File類型的目錄
     */
    public static void getAllFile(File dir) {
//        File[] files = dir.listFiles(new FileFilterImpl() {
//            @Override
//            public boolean accept(File pathname) {
//            //如果是文件夾,繼續遍歷
//            if (pathname.isDirectory()){
//             return true;
//              }
//             return pathname.getName().toLowerCase().endsWith(".java");
//              }
//           }
//        );//傳遞過濾器對象
//
        dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
            }
        });
        for (File f : files) {
            if (f.isDirectory()) {//是文件夾繼續遍歷
                getAllFile(f);
            } else {//不是文件夾則輸出
                System.out.println(f);
            }
        }
    }

2.3 lambda表達式(接口中只有一個抽象方法)

三.原理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM