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就是不同的策略,得到不同的结果。