黑马程序员技术交流社区

标题: 关于FilenameFilter的accept方法 [打印本页]

作者: 王冰    时间: 2012-7-10 23:15
标题: 关于FilenameFilter的accept方法
本帖最后由 王冰 于 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);
       }
}

作者: 丁二跃    时间: 2012-7-10 23:38
这个查看源码可以知道:

先把程序简化下,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.     }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2