listFiles() / list():取得子檔案/目錄陣列。isDirectory() / isFile():判斷類型。getAbsolutePath():取得完整路徑。import java.io.File;
public class ScanFolder {
public static void main(String[] args) {
String root = "F:\\sql"; // Windows 路徑雙反斜線
scan(root);
}
public static void scan(String path) {
File dir = new File(path);
if (!dir.exists() || !dir.isDirectory()) {
System.out.println("路徑不存在或非資料夾:" + path);
return;
}
File[] files = dir.listFiles();
if (files == null) return; // 權限不足等
for (File f : files) {
if (f.isDirectory()) {
System.out.println("[DIR] " + f.getAbsolutePath());
scan(f.getAbsolutePath()); // 遞迴
} else {
System.out.println("[FILE] " + f.getAbsolutePath());
// 這裡可處理檔案:解析 SQL、統計行數等
}
}
}
}
Files.walkFileTree(Paths.get(root), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.err.println("無法存取:" + file + " " + exc);
return FileVisitResult.CONTINUE;
}
});
優點:自動處理符號連結、權限錯誤、大目錄效能更好、支援並行流。
\\,或用正斜線 /(Windows API 亦支援)。\\server\share 同樣適用。