有沒有辦法用Java遞歸刪除整個目錄? spring
在正常狀況下,能夠刪除一個空目錄。 可是,要刪除帶有目錄的整個目錄,就再也不那麼簡單了。 apache
如何用Java刪除包含目錄的整個目錄? ide
具備堆棧且沒有遞歸方法的解決方案: 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(); } }
您能夠使用: ui
org.apache.commons.io.FileUtils.deleteQuietly(destFile);
spa
刪除文件,永不引起異常。 若是file是目錄,請刪除它和全部子目錄。 File.delete()和此方法之間的區別是:要刪除的目錄沒必要爲空。 沒法刪除文件或目錄時,不會引起任何異常。 code
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) { /* ... */ } });
在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; } });
若是您擁有Spring,則能夠使用FileSystemUtils.deleteRecursively : it
import org.springframework.util.FileSystemUtils; boolean success = FileSystemUtils.deleteRecursively(new File("directory"));