黑马程序员技术交流社区

标题: 关于File文件过滤器的问题 [打印本页]

作者: 李厚斌    时间: 2014-4-2 00:27
标题: 关于File文件过滤器的问题
本帖最后由 李厚斌 于 2014-4-3 03:16 编辑

File f=new File("g:\\11\\12333.txt");
//String[] list(FilenameFilter filter)  下面通过匿名内部类创建了FilenameFilter对象
搞不懂为么传递了对象进去。又没有指定参数列表里的参数什么的。就过滤了呢。
String[] arr=f.list(new FilenameFilter() {
                        
                        @Override
                        public boolean accept(File dir, String name) //可是这里又没有指定目录和名字只是复写了方法而已。怎么会起到过滤的作用的呢。。
                        {
                                // TODO Auto-generated method stub
                                if(name.endsWith(".java"))
                                        return true;
                                else
                                        return false;
                        }
                });
作者: 月影释    时间: 2014-4-2 01:32
那里面的目录和名字就是文件f的目录和名字 ,具体的调用应该是在调用的list里面吧  
作者: osully    时间: 2014-4-2 07:51
public String[] list(FilenameFilter filter) 的源码是调用了accept的

  1.     public String[] list(FilenameFilter filter) {
  2.         String names[] = list();
  3.         if ((names == null) || (filter == null)) {
  4.             return names;
  5.         }
  6.         List<String> 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 v.toArray(new String[v.size()]);
  13.     }
复制代码

作者: 郭黎明    时间: 2014-4-2 08:00
public static void main(String[] args) {
                File f=new File("c://myjava");
                String[] arr=f.list(new myfilter());
                for(int x=0;x<arr.length;x++){
                        System.out.println(arr[x]);
                }
                }
        }

class myfilter implements FilenameFilter{

        @Override
        public boolean accept(File dir, String name) {
                return name.endsWith(".java");
               
        }
因为你给list()方法传了一个过滤器,而list方法是由 f调用的,这样过滤器中的dir默认就是f所指定的路径,这就像在集合中你给容器本身传一个比较器一样
作者: leon_hm    时间: 2014-4-2 09:29
list内部调用了过滤器的方法accept
你把FilenameFilter对象传进去的时候,就相当于把过滤的代码传进去了。所以就能过滤




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