黑马程序员技术交流社区
标题:
使用FilenameFilter时的问题
[打印本页]
作者:
侯丛政
时间:
2013-2-8 12:26
标题:
使用FilenameFilter时的问题
public static void main(String[] args) {
//封装d盘
File file = new File("d:\\");
//通过匿名内部类实现过滤
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File
(
dir, name
).isFile() && name.endsWith(".java");
// 弄不明白这里的
dir
和 name是什么(是java自动把路径拆成这样的?) ? 谁传过来的呢 ?
}
});
//遍历
for (String str : strArray) {
System.out.println(str);
}
}
作者:
谢波
时间:
2013-2-8 13:30
本帖最后由 谢波 于 2013-2-8 13:58 编辑
这个要查File类的源代码
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方法
有两个,一个是不带参数的,一个是带FilenameFilter的
其中 fs.list(this); this代表调用list方法的File对象,fs是FileSystem的对象,FileSystem的list方法可以加载File路径下的文件并且返回String数组。
也就是说File的list方法是 ,其实是调用了FileSystem的list方法
。。。。
if (filter.accept(this, names
)) {这句话里的this就是调用list的对象也就是楼主说的 dir names
就对应name
作者:
李大强
时间:
2013-2-8 17:28
首先,当你调用file.list()方法时,程序就会自动搜索“d:\\”目录下的所有文件,
其次,每当程序搜索到一个文件时,为了标识此文件以便对此文件进行一些特有的操作
就把该文件所在的路径临时保存在dir目录中,而文件的名称就是name。
通过查阅API文档发现对这两个参数的定义如下:
dir - 被找到的文件所在的目录。
name - 文件的名称。
所以这两个变量都是用来分别暂时保存搜索到文件的目录和名称的。
作者:
pzfpang449
时间:
2013-2-8 17:28
楼主问的问题是: return new File(dir, name).isFile() && name.endsWith(".java"); // 弄不明白这里的dir 和 name是什么(是java自动把路径拆成这样的?) ? 谁传过来的呢 ?
首先要确定的是name是文件的名称,并不是一个“路径”,而dir表示当前文件的路径。
FilenameFilter 是判断制定的文件名是否包含在目录中
也就是说
public boolean accept(File dir, String name) {}
判断dir中是否存在名为name的文件
主要还是用来过滤文件的,你可以看看api文档,写的很清楚了。
希望对楼主有所帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2