public static void deleteDir(File dir) {
File[] files = dir.listFiles();
for (File f : files) {
if (f.isDirectory()) deleteDir(f);
else System.out.println(f + "——" + f.delete());
}
System.out.println(dir + "................" + dir.delete());
}
遞歸到空目錄時,dir.listFiles() 返回 null,for (File f : files) 遍歷 null 應拋 NullPointerException,為何程式正常運行?
JDK 文檔規定:File.listFiles() 在目錄為空時返回長度為 0 的數組(new File[0]),而非 null。只有在「路徑不存在」、「不是目錄」、「I/O 錯誤」時才返回 null。
因此:
files.length == 0 → for 循環零次迭代 → 直接執行 dir.delete() 刪除空目錄。File[] files = dir.listFiles();
if (files == null) { // 防禦性編程:處理非目錄、無權限等情況
return;
}
for (File f : files) { ... }
雖然空目錄不返回 null,但加上 null 判斷能增強代碼魯棒性,應對文件系統異常狀態。