【发布时间】:2016-06-29 12:43:07
【问题描述】:
我目前正在尝试以递归方式删除一个目录...奇怪的是,我能找到的最短的代码片段是以下构造,它使用 ad-hoc 内部类 并在 访客模式...
Path rootPath = Paths.get("data/to-delete");
try {
Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("delete file: " + file.toString());
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
System.out.println("delete dir: " + dir.toString());
return FileVisitResult.CONTINUE;
}
});
} catch(IOException e){
e.printStackTrace();
}
来源:here
考虑到新的nio API 消除了如此多的混乱和样板,这感觉非常笨拙和冗长......
有没有更短的方法来实现强制的递归目录删除?
我正在寻找纯原生 Java 1.8 方法,所以请不要链接到外部库...
【问题讨论】:
-
这感觉非常笨拙和冗长 为什么?这是一个非常好的方法。而 Java 8
Files.walk不会给你这样做的机会。 -
因为这会迫使用户重新定义一个简单的递归删除......因为这需要 15 行代码......像
Files.deleteRecursively(Path)这样的东西怎么样,或者一些可选的标志? -
答案是它根本不存在于内置的 NIO.2 中。您可以使用
Files.list使用递归方法,但它是相同的,我更喜欢您拥有的解决方案。 -
@fgysin Kotlin 在其标准库中有这个function。真的没有理由不包括它。
-
@KeksArmee 除了 Kotlin 函数将始终遵循符号链接。
标签: java directory nio delete-file