從Java 7開始,有一個遞歸目錄掃描。 Java 8可以在語法上稍微改進它。
Path start = FileSystems.getDefault().getPath(",,,");
walk(start, "**.java");
需要一個glob匹配類,最好在目錄級別,以跳過目錄。
class Glob {
public boolean matchesFile(Path path) {
return ...;
}
public boolean matchesParentDir(Path path) {
return ...;
}
}
然後步行將是:
public static void walk(Path start, String searchGlob) throws IOException {
final Glob glob = new Glob(searchGlob);
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
if (glob.matchesFile(file)) {
...; // Process file
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
return glob.matchesParentDir(dir)
? FileVisitResult.CONTINUE : FileVisitResult.SKIP_SUBTREE;
}
});
}
}
'的File.List(的FilenameFilter)'也沒有什麼幫助? – sanbhat
這不是遞歸的。 –