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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张飞年 中级黑马   /  2012-9-9 17:37  /  1928 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张飞年 于 2012-9-9 22:38 编辑

File f4 = new File("d:\\java1");
                File[] f3 = f4.listFiles(new FileFilter(){
                        public boolean accept(File name){
                                return name.isFile();//这里的name为什么就是f4呢???
                        }
                });
                for(File ff:f3){
                        System.out.println(ff);//把file对象输出,对象中封装的其实就是在址,所以输出也是地址
                }

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
File f4 = new File("d:\\java1");
                File[] f3 = f4.listFiles(new FileFilter(){
                        public boolean accept(File name){
                                return name.isFile();//在这里name不是f4,name是f4里面的File                        }
                });
                for(File ff:f3){
                        System.out.println(ff);//把file对象输出,对象中封装的其实就是在址,所以输出也是地址
                }
回复 使用道具 举报
本帖最后由 王红潮 于 2012-9-9 19:09 编辑

FileFilter()是文件过滤器,他底层的原理是多次调用accept方法来判断,accept(File pathname)这个方法是要往里面传一个pathname参数的,并返回true (留下) false(踢掉)
例如:
public boolean accept(File pathname){
    return pathname.isDirectory() || pathname.getName().endsWith(".txt");
}
回复 使用道具 举报
这是"listFiles"方法的源码
  public File[] listFiles(FileFilter filter) {
        String ss[] = list();
        if (ss == null) return null;
        ArrayList v = new ArrayList();
        for (int i = 0 ; i < ss.length ; i++) {
            File f = new File(ss, this);
            if ((filter == null) || filter.accept(f)) {
                v.add(f);
            }
        }
        return (File[])(v.toArray(new File[v.size()]));
    }

我们可以看到,他是先通过" File f = new File(ss, this);"这段代码,通过根据 抽象路径名和 child 路径名字符串创建一个新 File 实例。 在把这个实例"f"传递给accept(f)方法,
所以这里你的代码public boolean accept(File name){
                                return name.isFile();//这里的name不是"f4"而是"f4"下面的一个新的文件或文件夹实例
                }
回复 使用道具 举报
public File[] listFiles(FileFilter filter) {
        String ss[] = list();                  //取得一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
        if (ss == null) return null;
        ArrayList v = new ArrayList();
        for (int i = 0 ; i < ss.length ; i++) {
            File f = new File(ss, this);     //实例化一个新的f文件对象(就是"this"下面的文件或文件夹)
            if ((filter == null) || filter.accept(f)) {    //把f传递给"accept"方法,通过aceept方法获得一个逻辑值,所以可以通过覆写accept方法,所得到的值控制是否把此文件加入集合中,
                v.add(f);
            }
        }
        return (File[])(v.toArray(new File[v.size()]));
    }
回复 使用道具 举报
屈俊材 发表于 2012-9-9 20:29
这是"listFiles"方法的源码
  public File[] listFiles(FileFilter filter) {
        String ss[] = list();

源码看起来还是有点费劲,不过根据你的说明看懂了个大概,知道这里面的name是怎么来的。谢了
回复 使用道具 举报
王红潮 发表于 2012-9-9 19:06
FileFilter()是文件过滤器,他底层的原理是多次调用accept方法来判断,accept(File pathname)这个方法是要往 ...

这和我问的好像有些偏差,不过谢谢光顾
回复 使用道具 举报
陈俊来 发表于 2012-9-9 18:33
File f4 = new File("d:\\java1");
                File[] f3 = f4.listFiles(new FileFilter(){
         ...

现在知道了。是f4里面的一个新的file类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马