Java获取目录下的文件你知道是用哪个方法吗

举报
周杰伦本人 发表于 2022/11/29 18:52:48 2022/11/29
【摘要】 Java获取目录下的文件你知道是用哪个方法吗 File list()方法 含过滤器参数的list()方法 总结 Java获取目录下的文件你知道是用哪个方法吗Java的文件操作模块也是一个重要的模块,当初学Java的文件操作的时候一头雾水,觉得很难,现在复盘一下,巩固一下文件操作的知识,没准有新的收获。那就是从File类开始吧 FileFile类是文件名和目录路径名的抽象表示,它是一个文件集...

Java获取目录下的文件你知道是用哪个方法吗

Java的文件操作模块也是一个重要的模块,当初学Java的文件操作的时候一头雾水,觉得很难,现在复盘一下,巩固一下文件操作的知识,没准有新的收获。那就是从File类开始吧

File

File类是文件名和目录路径名的抽象表示,它是一个文件集,所以他的实例可能是一个目录也可能是一个文件,我们可以通过isDirectory()方法来判断是否为目录。

list()方法

它的list()方法可以返回目录下的文件列表,以数组的形式返回,这个方法返回的数组元素不能保证以特定的顺序出现,更不能按照字母顺序出现,在使用的时候我们通过File path = new File("."); 来获取File对象,.表示的是当前目录,然后path.list()方法获取当前目录下的所有文件,返回String类型的数组,既然是数组我们可以调用Arrays.sort()方法来对这数组排序。

含过滤器参数的list()方法

File类中还有一个含参的list(FilenameFilter filter)方法,它同样是返回一个字符串数组,方法的行为与list()方法的行为相同,只是返回数组中的字符串必须满足过滤器,如果这个过滤器参数设置为null的话,表示所有的文件名字都满足条件。

FilenameFilter是一个过滤文件名的接口,它只有一个方法。

FilenameFilter接口:

public interface FilenameFilter {
    
    boolean accept(File dir, String name);
}

它的accept()方法,也就是满足条件的话这方法返回true,名称满足过滤器。

对应接口,我们可以定义一个匿名内部类,这里我们还是不使用匿名内部类了,它的阅读性不大好,我们实现一下这个接口:

class XppFilter implements FilenameFilter {
  private Pattern pattern;
  public XppFilter(String regex) {
    pattern = Pattern.compile(regex);
  }
  public boolean accept(File dir, String name) {
    return pattern.matcher(name).matches();
  }
}

这个实现类怎么使用呢?我们可以通过path.list(new DirFilter(”.java“)) 来过滤目录下的文件,文件名包含.java的通过过滤器,accept()方法返回true

这其实是策略模式的体现,根据实现FilenameFilter名称过滤器接口定义不同的过滤策略,让代码更加的灵活。

总结

这篇文章我们讲了File类和它的两个关键的方法,list()方法获取目录下的所有文件,list(FilenameFilter filter)方法可以定义文件名过滤器对目录下的文件按名称进行筛选过滤,这两个方法还是很重要的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。