【发布时间】:2019-10-07 14:56:38
【问题描述】:
我正在使用以下 JAVA 8 代码来删除目录及其内容(文件、子目录和目录)。如果我想重构代码以保留目录并仅删除其内容,我该如何实现?
Path pathToBeDeleted = Paths.get(directoryPath);
Files.walk(pathToBeDeleted)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
【问题讨论】:
-
为什么需要对流的元素进行排序?你只是删除,所以你不需要它。
-
您可能想使用
Files#walkFileTree。我相信sorted会在内存中缓冲整个文件树(以pathToBeDeleted为根),尽管这对你来说可能无关紧要。 -
@Boris 颠倒顺序可能会确保在避免
DirectoryNotEmptyException的目录之前删除文件,尽管我并不肯定。 -
正如@Slaw 所说,我必须对元素进行排序以避免 DirectoryNotEmptyException 异常(Java NIO 需要一个空目录才能删除它)