有没有办法用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"));