Java File中的过滤器
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
FileFilter和FilenameFilter 都是接口,内部都有一个需要实现的方法。它俩的作用就是在构造File[]是进行筛选,按条件将符合条件的file放进File[]中
下面分开讲
FileFilter
package java.io;
//这是FileFilter的源码(删除了注释)
@FunctionalInterface
public interface FileFilter {
boolean accept(File pathname);
}
实际应用
private static void getAllFiles1(File file) {
if(file.isDirectory()){
File[] files = file.listFiles(new FileFilter() {//匿名内部类写法,直接重写方法
@Override
public boolean accept(File pathname) {//将.jar结尾的文件存储到files中
//这里写过滤的条件
return pathname.isDirectory() || pathname.getName().endsWith(".jar");
}
});
for (File file1 : files) {
System.out.println(file1);
}
}
}
FilenameFilter
package java.io;
//这是FilenameFilter的源码(删除了注释)
@FunctionalInterface
public interface FilenameFilter {
boolean accept(File dir, String name);
}
实际应用
private static void getAllFiles2(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//new File(dir, name) File的构造方法
return new File(dir, name).isDirectory() || name.endsWith(".java");
}
});
for (File file1 : files) {
System.out.println(file1);
}
}
}
值得注意的是:
File[] listFiles()
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
都只能得到下一层的文件,如果想要得到更深层的文件,需要嵌套或者递归