FilenameFilter顾名思义,就是通过名字来过滤掉一些文件。
这个接口很简单, 不用多解释, 就只有一个accept方法:
boolean accept(File dir, String name);
那来看看第一种实现 - 创建一个实现类
public class ForFun {
public static void main(String[] args) {
File path = new File(".");
String[] nameList = path.list(new DirFilter(".class"));
for (String name : nameList) {
System.out.println(name);
}
}
static class DirFilter implements FilenameFilter {
private String filter;
public DirFilter(String filter) {
this.filter = filter;
}
@Override
public boolean accept(File dir, String name) {
String f = new File(name).getName();
return f.indexOf(filter) != -1;
}
}
}
意图很明确, 就是要打印出当前目录下面含有".class"的所有文件。
第二种实现, 使用匿名类
public class ForFun {
public static void main(String[] args) {
File path = new File(".");
String[] nameList = path.list(filter(".class"));
for (String name : nameList) {
System.out.println(name);
}
}
public static FilenameFilter filter(final String filterName) {
return new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
String f = new File(name).getName();
return f.indexOf(filterName) != -1;
}
};
}
}
好, 这样也是没问题的。 接下来更简短, 但个人觉得没必要, 程序的可读性不好
public class ForFun {
public static void main(String[] args) {
File path = new File(".");
String[] nameList = path.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
String f = new File(name).getName();
return f.indexOf(".class") != -1;
}
});
for (String name : nameList) {
System.out.println(name);
}
}
}