public class Test {
public static void main(String[] args){
File file = new File("..");//directory
String[] fileNames = file.list(new FileFilter(".*\\.class"));//以.class结尾的文件
for(String fileName : fileNames)
System.out.println(fileName);
}
}
class FileFilter implements java.io.FilenameFilter{
private java.util.regex.Pattern pattern;
public FileFilter(String regex){
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
我们可以查看File类的list(FilenameFilter filter)方法:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}从源码可以看出,FilenameFilter实现类不同,accept的实现不同,通过filter.accept(this, names[i])的结果也不同,方法的最终返回结果也会不同,不同的FilenameFilter就是不同的策略,得到不同的结果。
本文介绍了一个Java程序实例,展示了如何利用正则表达式和FilenameFilter接口来筛选指定目录下以.class为扩展名的文件。通过具体的代码实现了文件过滤的功能,并解释了FilenameFilter接口的工作原理。
1851

被折叠的 条评论
为什么被折叠?



