Java获取目录下的文件你知道是用哪个方法吗
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)方法可以定义文件名过滤器对目录下的文件按名称进行筛选过滤,这两个方法还是很重要的。
- 点赞
- 收藏
- 关注作者
评论(0)