但是我们看到第8行代码只是传入了过滤器,那么accept方法是如何被调用的呢?查看
String[] list(FilenameFilter) 的源码:
/*list(FilenameFilter)源码解析*/
public String[] list(FilenameFilter filter) {
String names[] = list();//调用list()方法获取所有名称
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();//用于保存过滤后的文件名
for (int i = 0 ; i < names.length ; i++) {//遍历
//调用filter的accept方法,传入当前目录this和遍历到的名称names[i]
if (filter.accept(this, names[i])) {
v.add(names[i]);//满足过滤器条件的添加到集合中
}
}
return v.toArray(new String[v.size()]);//将集合转成数组返回,限定增删操作
}
也就是说,我们实现的accept方法是在构造器中被调用的。

本文详细解析了Java中`list(FilenameFilter)`方法的源码,揭示了如何在遍历目录时调用自定义的`accept`方法进行文件过滤。通过实例展示了如何使用`FilenameFilter`实现文件名筛选,适合Java初学者和进阶者学习,提升对文件操作的理解。
https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0
1166

被折叠的 条评论
为什么被折叠?



