A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

tanghuiTom

初级黑马

  • 黑马币:41

  • 帖子:11

  • 精华:0

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

1 个回复

倒序浏览
FileFilterByName ffbn = new FileFilterByName();因为这个调用无参构造
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马