用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"));
相关文章
相关标签/搜索