核心 API
file.isDirectory() / isFile() 區分類型。
file.getName() 獲取文件名。
name.contains("A") 或 name.indexOf("A") >= 0 模糊匹配。
遞歸遍歷示例
public void search(File dir, String keyword, List result) {
File[] files = dir.listFiles();
if (files == null) return; // 無權限或非目錄
for (File f : files) {
if (f.isDirectory()) {
search(f, keyword, result);
} else if (f.getName().contains(keyword)) {
result.add(f);
}
}
}
// 調用
List found = new ArrayList<>();
search(new File("C:/"), "A", found);
found.forEach(f -> System.out.println(f.getAbsolutePath()));
現代替代:Files.walk (Java 8+)
List found = Files.walk(Paths.get("C:/"))
.filter(p -> p.getFileName().toString().contains("A"))
.collect(Collectors.toList());
性能提示
- C 盤根目錄文件極多,遞歸耗時久,建議限定搜索深度或指定子目錄。
- 大規模搜索考慮
Lucene / Everything SDK 建立索引。