首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 遞歸刪除文件夾下所有文件實現代碼

     編輯:Java 程式設計入門

需求場景

項目中常需清理臨時目錄、日誌舊文件等。Java File.delete() 僅能刪除空目錄或單個文件,需配合遞歸實現「刪除非空目錄及其所有子文件」。

核心遞歸邏輯

public void deleteFile(File path) {
    if (path.isDirectory()) {
        File[] files = path.listFiles();
        if (files != null) {
            for (File file : files) deleteFile(file); // 遞歸處理子項
        }
    } else {
        path.delete(); // 刪除文件
    }
    // 可選:刪除空目錄本身 path.delete();
}

完整代碼

package org.sw;
import java.io.File;

public class DeleteFolder {
    public void deleteFile(File oldPath) {
        if (oldPath.isDirectory()) {
            System.out.println(oldPath + " 是文件夾");
            File[] files = oldPath.listFiles();
            if (files != null) {
                for (File file : files) deleteFile(file);
            }
        } else {
            oldPath.delete();
        }
    }

    public static void main(String[] args) {
        new DeleteFolder().deleteFile(new File("E:/ddd/"));
    }
}

關鍵注意點

  • 空目錄保護:listFiles() 可能返回 null(無權限/非目錄),需判空
  • 符號鏈接:遞歸可能進入死循環,建議加 Files.isSymbolicLink() 判斷
  • 大量文件性能:遞歸棧溢出風險,生產環境建議用 Files.walkFileTree (NIO.2)
  • 刪除目錄本身:上述代碼保留空目錄,若需連目錄一起刪,在遞歸結束後加 path.delete()

現代替代方案(Java 7+)

import java.nio.file.*;
import java.io.IOException;

Files.walkFileTree(Paths.get("E:/ddd"), new SimpleFileVisitor<Path>() {
    @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        Files.delete(file); return FileVisitResult.CONTINUE;
    }
    @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
        Files.delete(dir); return FileVisitResult.CONTINUE;
    }
});

NIO.2 版本自動處理符號鏈接、權限異常,且無棧溢出風險,推薦生產環境使用。

總結

遞歸刪除雖簡單但需注意邊界條件;現代項目優先選 Files.walkFileTree,舊項目維護時加上判空與符號鏈接檢查即可安全上線。

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