黑马程序员技术交流社区
标题:
问个关于文件过滤器的问题
[打印本页]
作者:
莫嘉伟
时间:
2013-2-21 22:34
标题:
问个关于文件过滤器的问题
import java.io.File;
import java.io.FilenameFilter;
public class FilenameFilterTest {
public static void main(String[] args){
File file=new File(".");
String[] nameList=file.list(new MyFilenameFilter());
for(String name:nameList){
System.out.println(name);
}
}
}
class MyFilenameFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java")||new File(name).isDirectory();
}
}
这个代码在下有点不懂,在list()方法中传入FilenameFilter的时候只是新建了个对象但是没有调用accept方法,而且accept方法好像也不返回文件名啊··是不是说这些都是在list()方法中完成的,list()用FilenameFilter()对象调用accept方法,还传入文件路径和文件名给accept方法,然后根据accept方法的返回值列出相关文件,它的运作机制是这样的吗?
作者:
李挺
时间:
2013-2-21 22:51
本帖最后由 李挺 于 2013-2-21 22:53 编辑
它在list()方法中传入的是MyFilenameFilter,下面有实现FilenameFilter,复写accept方法是判断文件后缀名是不是一样
List方法使用传入的MyFilenameFilter中的accept方法判断这个文件目录下的文件对于accept方法是否返回是true,如果是,则写入前面的集合
作者:
谢波
时间:
2013-2-21 23:01
public String[] list() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
return fs.list(this);
}
复制代码
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]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}
复制代码
这是list两个方法的源码,第二个是带过滤器的list方法
从中可以看出楼主的理解是正确的
作者:
莫嘉伟
时间:
2013-2-21 23:35
谢谢3楼~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2