【问题标题】:How to delete the contents of a directory (files and subdirectory) without deletecting the directory itself with Java NIO?如何在不使用 Java NIO 删除目录本身的情况下删除目录(文件和子目录)的内容?
【发布时间】: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 需要一个空目录才能删除它)

标签: java file directory nio


【解决方案1】:

您需要将filter 添加到您的流中(在映射操作之前):

filter(path -> !path.equals(pathToBeDeleted))

这将返回一个仅包含目录内容的流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多