分析
- 目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录。
- 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。
基础版
public class FileSearch{
public static void main(String[] args) {
File dir = new File("C:\\A-h Study\\Code\\IdeaProjects\\StudyWithSC\\project\\src\\main\\java");
printDir(dir);
}
public static void printDir(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile()) {
if (file.getName().endsWith(".java")) {
System.out.println("文件名:" + file.getAbsolutePath());
}
} else {
printDir(file);
}
}
}
}
使用文件过滤器优化
public class FileSearchFileFilter {
public static void main(String[] args) {
File dir = new File("D:\\aaa");
printDir2(dir);
}
public static void printDir2(File dir) {
File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
for (File file : files) {
if (file.isFile()) {
System.out.println("文件名:" + file.getAbsolutePath());
} else {
printDir2(file);
}
}
}
}
使用Lambda表达式简化代码
public class FileSearchFileFilterLambda {
public static void main(String[] args) {
File dir = new File("D:\\aaa");
printDir2(dir);
}
public static void printDir2(File dir) {
File[] files = dir.listFiles(pathname -> pathname.getName().endsWith(".java") || pathname.isDirectory());
for (File file : files) {
if (file.isFile()) {
System.out.println("文件名:" + file.getAbsolutePath());
} else {
printDir2(file);
}
}
}
}