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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯丛政 中级黑马   /  2013-2-8 12:26  /  1338 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       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);
                }
        }

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 谢波 于 2013-2-8 13:58 编辑

这个要查File类的源代码
  1. public String[] list() {
  2.         SecurityManager security = System.getSecurityManager();
  3.         if (security != null) {
  4.             security.checkRead(path);
  5.         }
  6.         return fs.list(this);
  7.     }
复制代码
  1. public String[] list(FilenameFilter filter) {
  2.         String names[] = list();
  3.         if ((names == null) || (filter == null)) {
  4.             return names;
  5.         }
  6.         ArrayList v = new ArrayList();
  7.         for (int i = 0 ; i < names.length ; i++) {
  8.             if (filter.accept(this, names[i])) {
  9.                 v.add(names[i]);
  10.             }
  11.         }
  12.         return (String[])(v.toArray(new String[v.size()]));
  13.     }
复制代码
这就是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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
首先,当你调用file.list()方法时,程序就会自动搜索“d:\\”目录下的所有文件,
其次,每当程序搜索到一个文件时,为了标识此文件以便对此文件进行一些特有的操作
就把该文件所在的路径临时保存在dir目录中,而文件的名称就是name。

通过查阅API文档发现对这两个参数的定义如下:
                                dir - 被找到的文件所在的目录。
                                name - 文件的名称。

所以这两个变量都是用来分别暂时保存搜索到文件的目录和名称的。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼主问的问题是: 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文档,写的很清楚了。

希望对楼主有所帮助

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马