首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 遞歸刪除目錄:空目錄為何不會拋異常

     編輯:程式設計疑難解答

代碼片段

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 判斷能增強代碼魯棒性,應對文件系統異常狀態。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved