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");
        });

你可能感兴趣的:(java疯狂讲义重点总结)