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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王冰 中级黑马   /  2012-7-10 23:15  /  1639 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王冰 于 2012-7-11 02:08 编辑

public static void listDemo_2()
{
        File dir = new File("F:\\javaCode\\day18");
       String[] arr = dir.list(new FilenameFilter()//list方法是根据accept方法的返回值来判断是不是所需要的文件
       {
               public boolean accept(File dir,String name)
              {
                     sop("dir:"+dir+"......name:"+name);//这里打印的是被封装成File的目录和目录下的文件的名称,
                                                                            //但是FilenameFilter类中具体是怎么样找到目录和文件的一直不明白,有谁能具体说下
                     return name.endsWith(".class");
             }
       });
       sop("len:"+arr.length);
       for (String name : arr)
      {
             sop(name);
       }
}

1 个回复

倒序浏览
这个查看源码可以知道:

先把程序简化下,dir.list( FilenameFilter )
看源代码:
  1. public String[] list(FilenameFilter filter) {
  2.         String names[] = list();   //这里调用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])) {//调用定义的FilenameFilter 的accept 方法,
  9.                                             // this就是当前目录对象
  10.                 v.add(names[i]);      //如果 返回 true 就 加到列表中
  11.             }
  12.         }
  13.         return (String[])(v.toArray(new String[v.size()]));
  14.     }
复制代码

点评

就是说已经封装好了,我们直接用就可以了,只用实现accept方法,让他返回true或者false就可以了  发表于 2012-7-11 01:31
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马