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

Java 遞歸刪除檔案與目錄完整實作範例

     編輯:Java 程式設計入門

需求場景

專案中常需刪除整個目錄樹(包含子目錄與檔案),Java File.delete() 僅能刪除空目錄,需自行實作遞歸刪除邏輯。

核心實作類別

public class FileUtils {

    /** 統一入口:刪除檔案或目錄(含子內容) */
    public boolean delete(String path) {
        File file = new File(path);
        if (!file.exists()) return false;
        return file.isFile() ? deleteFile(file) : deleteDirectory(file);
    }

    /** 刪除單一檔案 */
    private boolean deleteFile(File file) {
        if (file.isFile() && file.exists()) {
            return file.delete();
        }
        return false;
    }

    /** 遞歸刪除目錄及其所有內容 */
    private boolean deleteDirectory(File dir) {
        if (!dir.isDirectory()) return false;

        File[] files = dir.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isFile()) {
                    if (!deleteFile(f)) return false;
                } else {
                    if (!deleteDirectory(f)) return false;
                }
            }
        }
        // 刪除空目錄本身
        return dir.delete();
    }
}

關鍵細節說明

  • 路徑正規化:目錄路徑補齊 File.separator,避免路徑拼接錯誤
  • 空值防護:listFiles() 可能回傳 null,需判空
  • 失敗快速返回:任一子項刪除失敗即中斷,回傳 false
  • Windows 路徑驗證:可用正則 [A-Za-z]:\\\\[^:?\"><*]* 初步校驗

測試主程式

public static void main(String[] args) {
    FileUtils utils = new FileUtils();
    
    // 建立測試目錄結構
    String testDir = "D:\\Test\\Sub\\Folder";
    new File(testDir).mkdirs();
    new File(testDir, "file.txt").createNewFile();
    
    // 執行刪除
    boolean result = utils.delete("D:\\Test");
    System.out.println("刪除結果:" + result);  // true
}

進階補充:Java 7+ Files.walkFileTree

現代專案建議使用 NIO.2 更簡潔:

Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() {
    @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        Files.delete(file); return FileVisitResult.CONTINUE;
    }
    @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) {
        Files.delete(dir); return FileVisitResult.CONTINUE;
    }
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved