在论坛里看到一个问题,意思就是通过使用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显示的传递一个参数,那么它的参数又是如何得到的?它的参数所代表的的路径又是什么呢?它是如何获取到该路径的呢? |
|