黑马程序员技术交流社区
标题:
一个关于IO流中FileFilter接口的问题
[打印本页]
作者:
tanghuiTom
时间:
2016-9-27 19:42
标题:
一个关于IO流中FileFilter接口的问题
在论坛里看到一个问题,意思就是通过使用FileFilter将一个目录下(包括子目录)的所有.txt文件挑选出来。
下面是我写代码:
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
public class Test1{
public static void main(String[] args) {
File file = new File("e:\\JAVA\\String\\Test");
FileFilterByName ffbn = new FileFilterByName();
//File[] files = file.listFiles(ffbn);
//System.out.println(files.length);
List<File> list = new ArrayList<File>();
getFileToList(file, list, ffbn);
for (File file2 : list){
System.out.println(file2);
}
}
private static void getFileToList(File file, List<File> list, FileFilter ffbn) {
File[] files1 = file.listFiles();
File[] files2 = file.listFiles(ffbn);
for (File file1 : files1) {
if (file1.isDirectory()) {
getFileToList(file1, list, ffbn);
}
}
for (File file2 : files2)
{
list.add(file2);
}
}
}
class FileFilterByName implements FileFilter
{
/*private File file;
public FileFilterByName(File file)
{
this.file = file;
}*/
public boolean accept(File file)
{
if (file.getName().endsWith(".txt"))
{
return true;
}
return false;
}
}
以上代码已经实现了上述要求的功能,但是问题不在这里。在这之前我不知道有FileFilter这个接口,所以就慢慢查API文档来做的。
刚开始我在创建一个类实现FileFilter这个接口的时候,代码是这样写的,就是将上面代码的FileFilterByName类中的注释去掉。这样就出问题了,我一直认为没有错,可是我在主函数里用这两句话File[] files = file.listFiles(ffbn); System.out.println(files.length); 测试,输出的结果总是0。当时就搞郁闷了,不知道问题到底出在哪。然后就在网上找相关问题,后来知道将下面几条代码注释掉就可以了。
private File file;
public FileFilterByName(File file)
{
this.file = file;
}
我的问题是:为什么我显示的给accept这个方法传递一个参数,反而不能实现过滤的功能呢?
如果不给accept显示的传递一个参数,那么它的参数又是如何得到的?它的参数所代表的的路径又是什么呢?它是如何获取到该路径的呢?
作者:
Jarc
时间:
2016-9-28 14:17
FileFilterByName ffbn = new FileFilterByName();因为这个调用无参构造
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2