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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫嘉伟 中级黑马   /  2013-2-21 22:34  /  1194 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.File;
import java.io.FilenameFilter;

public class FilenameFilterTest {
public static void main(String[] args){
  File file=new  File(".");
  String[] nameList=file.list(new MyFilenameFilter());
  for(String name:nameList){
   System.out.println(name);
  }
}
}
class MyFilenameFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
  return name.endsWith(".java")||new File(name).isDirectory();
}
}
这个代码在下有点不懂,在list()方法中传入FilenameFilter的时候只是新建了个对象但是没有调用accept方法,而且accept方法好像也不返回文件名啊··是不是说这些都是在list()方法中完成的,list()用FilenameFilter()对象调用accept方法,还传入文件路径和文件名给accept方法,然后根据accept方法的返回值列出相关文件,它的运作机制是这样的吗?

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 理解是对的

查看全部评分

3 个回复

倒序浏览
本帖最后由 李挺 于 2013-2-21 22:53 编辑

它在list()方法中传入的是MyFilenameFilter,下面有实现FilenameFilter,复写accept方法是判断文件后缀名是不是一样
List方法使用传入的MyFilenameFilter中的accept方法判断这个文件目录下的文件对于accept方法是否返回是true,如果是,则写入前面的集合

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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两个方法的源码,第二个是带过滤器的list方法
从中可以看出楼主的理解是正确的

评分

参与人数 1黑马币 +30 收起 理由
舒远 + 30

查看全部评分

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