FileFilter和FilenameFilter
FileFilter和FilenameFilter概述
FileFilter过滤器的原理和使用
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
if(pathname.isDirectory()) {
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}
public class SearchPractice {
public static void main(String[] args) {
File f1 = new File("F:\\test");
method(f1);
}
public static void method(File f1) {
File[] files = f1.listFiles(new FileFilterImpl()); //这里也可以用匿名内部类
for (File file : files) {
if(file.isDirectory()) {
method(file);
}else {
if(file.getName().toLowerCase().endsWith(".java")) {
System.out.println(file);
}
}
}
}
}
FilenameFilter过滤器的原理和使用
public class FileFilterClass {
public static void main(String[] args) {
File f1 = new File("F:\\test");
method(f1);
}
public static void method(File f1) {
File[] files = f1.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java");
}
});
for (File file : files) {
if(file.isDirectory()) {
method(file);
}else {
System.out.println(file);
}
}
}
}
由于FilenameFilter的源代码只有一行,因此可以用Lambda简化代码(同样可以类比FileFilter)
File[] files = f1.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java");
}
});
==>
File[] files = f1.listFiles((dir, name)-> new File(dir, name).isDirectory() || name.toLowerCase().endsWith(".java"));