您的位置:首页 > 编程语言 > Java开发

FilenameFilter来打印File下的所有java文件名

2008-11-25 21:42 393 查看
在main中给定一个目录,在其下寻找满足以java作为后缀的文件名,并输出。

import java.io.*;
import java.util.*;

public class DirList
{
public static void main(String[] args)
{
File path=new File("E://Test"); //指定目录
String[] lst;

lst=path.list(new DirFilter()); //重点,看下边的解释
Arrays.sort(lst);
for(int i=0;i<lst.length;i++)
System.out.println(lst[i]);

}
}
class DirFilter implements FilenameFilter
{
public boolean isJavaFile(String fn)
{
if(fn.toLowerCase().endsWith("java")) return true;
return false;
}
public DirFilter(){}
public boolean accept(File dir,String name)
{
return isJavaFile(name);
}
}

解释:
File的list方法参数引入了一个文件名过滤类FilenameFilter。
如果给定的filter为空,则该目录下的所有文件名都符合要求。否则,只有使得FilenameFilter.accept()方法返回true的文件名才算符合条件。
对于每一个指定目录下的文件名,自动都会传到FilenameFilter类的accept方法,以此判断是否满足过滤器条件,最后这些满足过滤器条件的文件名以string数组返回。
下边给出File.list()方法的源码,以便清楚这个机制是怎么执行的。

public String[] list(FilenameFilter filter) {
String names[] = list(); //list()是File.list(),用来获取File下一级的所有文件名
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
//在这里把filter的accept隐藏了,在用户看来就是自动执行的
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[0]));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: