用Java遞歸刪除目錄

有沒有辦法用Java遞歸刪除整個目錄? spring

在正常狀況下,能夠刪除一個空目錄。 可是,要刪除帶有目錄的整個目錄,就再也不那麼簡單了。 apache

如何用Java刪除包含目錄的整個目錄? ide


#1樓

具備堆棧且沒有遞歸方法的解決方案: post

File dir = new File("/path/to/dir");
File[] currList;
Stack<File> stack = new Stack<File>();
stack.push(dir);
while (! stack.isEmpty()) {
    if (stack.lastElement().isDirectory()) {
        currList = stack.lastElement().listFiles();
        if (currList.length > 0) {
            for (File curr: currList) {
                stack.push(curr);
            }
        } else {
            stack.pop().delete();
        }
    } else {
        stack.pop().delete();
    }
}

#2樓

您能夠使用: ui

org.apache.commons.io.FileUtils.deleteQuietly(destFile); spa

刪除文件,永不引起異常。 若是file是目錄,請刪除它和全部子目錄。 File.delete()和此方法之間的區別是:要刪除的目錄沒必要爲空。 沒法刪除文件或目錄時,不會引起任何異常。 code


#3樓

for(Path p : Files.walk(directoryToDelete).
        sorted((a, b) -> b.compareTo(a)). // reverse; files before dirs
        toArray(Path[]::new))
{
    Files.delete(p);
}

或者,若是您想處理IOException遞歸

Files.walk(directoryToDelete).
    sorted((a, b) -> b.compareTo(a)). // reverse; files before dirs
    forEach(p -> {
        try { Files.delete(p); }
        catch(IOException e) { /* ... */ }
      });

#4樓

在Java 7+中,能夠使用Files類。 代碼很簡單: get

Path directory = Paths.get("/tmp");
Files.walkFileTree(directory, 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;
   }
});

#5樓

若是您擁有Spring,則能夠使用FileSystemUtils.deleteRecursivelyit

import org.springframework.util.FileSystemUtils;

boolean success = FileSystemUtils.deleteRecursively(new File("directory"));
相關文章
相關標籤/搜索