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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值