File類中的list()和listFiles()方法

  • 四種方法:

1. String[] list() ;

說明:返回某個目錄下所有文件和目錄的文件名,返回類型String[]

2. String[] list(FilenameFilter filter);

3. File[] listFiles();

說明:返回某個目錄下所有文件和目錄的絕對路徑,返回類型File[]

4. File[] ListFiles(FileFilter filter) 

  • 文件過濾器:

5. FileFilter和FilenameFilter:

(1)FilenameFilter接口對應的內部方法:boolean accept(File dir,String name);  

dir:當前文件目錄;name:當前文件名

String[] list(FilenameFilter filter)遍歷指定目錄下面,指定的後綴的文件。

底層實現:

      先把目錄下面的文件調用list()方法全部存放到一個String[]數組裏面,然後遍歷數組

      把符合filter.accept(this, names[i])條件的放到一個ArrayList裏面

      最後把ArrayList轉化爲String[]數組

源碼:

     public String[] list(FilenameFilter filter) {
        String names[] = list();//把所有目錄文件列出來
        if ((names == null) || (filter == null)) {
            return names;
        }
        ArrayList v = new ArrayList();
        for (int i = 0 ; i < names.length ; i++) {//遍歷數組
            if (filter.accept(this, names[i])) {
            v.add(names[i]);/把滿足條件的放到List集合中
            }
        }
        return (String[])(v.toArray(new String[v.size()]));

    }

如何使用:通常用匿名內部類或者是Lambda表達式,示例如下

 File file = new File(".");
 String[] nameList = file.list(((dir, name) -> name.endsWith(".java") || new File(name).isDirectory()));
 for (String name : nameList) {
      System.out.println(name);
 }

  String[] nameList2=file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".java") || new File(name).isDirectory();
            }
        });

(2)FileFilter接口對應的內部方法:boolean accept(File pathname)

 File[] fileList=file.listFiles((pathname)->{
            if (pathname.isDirectory()){
                return true;
            }
            String fileName=pathname.getName();
            return fileName.endsWith(".java");
        });

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章