黑马程序员技术交流社区
标题:
关于File文件过滤器的问题
[打印本页]
作者:
李厚斌
时间:
2014-4-2 00:27
标题:
关于File文件过滤器的问题
本帖最后由 李厚斌 于 2014-4-3 03:16 编辑
File f=new File("g:\\11\\12333.txt");
//String[] list(FilenameFilter filter) 下面通过匿名内部类创建了FilenameFilter对象
搞不懂为么传递了对象进去。又没有指定参数列表里的参数什么的。就过滤了呢。
String[] arr=f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) //可是这里又没有指定目录和名字只是复写了方法而已。怎么会起到过滤的作用的呢。。
{
// TODO Auto-generated method stub
if(name.endsWith(".java"))
return true;
else
return false;
}
});
作者:
月影释
时间:
2014-4-2 01:32
那里面的目录和名字就是文件f的目录和名字 ,具体的调用应该是在调用的list里面吧
作者:
osully
时间:
2014-4-2 07:51
public String[] list(FilenameFilter filter) 的源码是调用了accept的
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
复制代码
作者:
郭黎明
时间:
2014-4-2 08:00
public static void main(String[] args) {
File f=new File("c://myjava");
String[] arr=f.list(new myfilter());
for(int x=0;x<arr.length;x++){
System.out.println(arr[x]);
}
}
}
class myfilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
因为你给list()方法传了一个过滤器,而list方法是由 f调用的,这样过滤器中的dir默认就是f所指定的路径,这就像在集合中你给容器本身传一个比较器一样
作者:
leon_hm
时间:
2014-4-2 09:29
list内部调用了过滤器的方法accept
你把FilenameFilter对象传进去的时候,就相当于把过滤的代码传进去了。所以就能过滤
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2