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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 常在河边走_ 中级黑马   /  2013-9-16 00:04  /  1527 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 需求:请获取d盘目录下以java结尾的文件名称。
*/
public class FileDemo2 {
        public static void main(String[] args) {
                // 封装目录
                File file = new File("d:\\");

                // 获取满足条件的名称
                String[] strArray = file.list(new FilenameFilter() {
                        @Override
                        public boolean accept(File dir, String name) {                //  这里不懂, 我想问的是这里的 dir 和 name 是怎么传入的?一直看不懂
                                //判断是否是文件                                  判断是否是.java后缀的文件
                                return new File(dir,name).isFile() && name.endsWith(".java");
                        }
                });
               
                //遍历
                for(String str : strArray){
                        System.out.println(str);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

5 个回复

倒序浏览
这是一个函数啊,调用时传入啊,你把代码写完整应该能看出来
回复 使用道具 举报
File.list()方法的参数是一个FilenameFilter,FilenameFilter接口中包含一个accept方法,我们需要实现这个方法,在该方法中知道自己的规则,也就是需要过滤出的东西。
这种用法是一个典型的Comman设计模式,因为File的list方法需要判断规则:判断那些文件需要列出。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王广亚 于 2013-9-16 17:44 编辑

不知楼主是否还记得比较器?一样的道理
  1. <p>import java.io.*;
  2. import java.util.*;
  3. class Student{
  4.         private String name;
  5.         private int age;
  6.         Student(String name,int age)
  7.         {
  8.                 this.name = name;
  9.                 this.age = age;
  10.         }        
  11.         public String getName()
  12.         {
  13.                 return name;
  14.         }
  15.         public int getAge()
  16.         {
  17.                 return age;
  18.         }
  19. }
  20. class TreeSetDemo2
  21. {
  22.         public static <T> void main(String[] args)
  23.         {
  24.                 TreeSet<Student> ts = new TreeSet<Student>(new MyCompare<Object>());</p><p>                ts.add(new Student("lisi02",22));
  25.                 ts.add(new Student("lisi02",21));
  26.                 ts.add(new Student("lisi007",20));
  27.                 ts.add(new Student("lisi09",19));
  28.                 ts.add(new Student("lisi06",18));
  29.                 ts.add(new Student("lisi06",18));
  30.                 ts.add(new Student("lisi007",29));
  31.                 Iterator<Student> it = ts.iterator();
  32.                 while(it.hasNext())
  33.                 {
  34.                         Student stu = (Student)it.next();
  35.                         System.out.println(stu.getName()+"..."+stu.getAge());
  36.                 }
  37.         }
  38. }
  39. class MyCompare<T> implements Comparator<T>//定义比较器
  40. {
  41.         public int compare(Object o1,Object o2)
  42.         {
  43.                 Student s1 = (Student)o1;
  44.                 Student s2 = (Student)o2;
  45.                 int num = s1.getName().compareTo(s2.getName());
  46.                 if(num==0)
  47.                 {
  48.                         return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  49.                 }
  50.                 return num;
  51.         }
  52. }</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
其实list方法是这样写的,如果你能看懂你就知道他是如何传值得了
  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.     }
复制代码
回复 使用道具 举报
第一个参数表示要过滤的目录,也就是你要遍历的时传入的目录。第二个参数表示你要遍历目录中所包含的文件(非目录)。这个方法是一个回调函数,每次调用这个方法,该方法会自动把你要遍历的当前目录传进去根据你实现的方法 的返回值进行过滤。对于这你的这个程序来说就会把你当前文件对象传入当作目录来进行过滤,如果你传入的文件不是目录就会报错。大体意思就是这样!希望可以帮到你。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马