【问题标题】:Renaming directory and some of the containing files/subdirectories重命名目录和一些包含文件/子目录
【发布时间】:2011-12-12 14:30:47
【问题描述】:

我最近正在制作一些 Java 软件来查找文件夹中的一些文件/目录,如果它们的名称包含某些文本,它们将被重命名为其他名称。我使用Files.walkFileTree 遍历目录,如果找到一个匹配的文件/目录,它将使用File.renameTo 方法重命名。

但是这里我遇到了一个问题,如果一个子目录被重命名了,这个子目录下的所有重命名操作都会失败。

我认为这是由于该子目录已被标记为打开,因此无法对其文件/文件夹进行更改。有什么办法解决吗?

【问题讨论】:

    标签: java file-io file-rename


    【解决方案1】:

    如果首先确定所有名称,然后在重命名目录包含的文件之前重命名目录,则会发生这种情况。

    有几个方法是先重命名文件深度(仅在重命名文件后重命名目录)或仅在执行过程中构建文件列表。

    【讨论】:

      【解决方案2】:

      这可以通过将目录从“最底层的第一个到最顶层的最后一个”重命名来解决。

      【讨论】:

        【解决方案3】:

        恐怕这就是walkFileTree 的语义。 NIO 2 的技术负责人 Alan Bateman 表示:

        walkFileTree 实用方法是一个内部迭代器,它利用 从目录流中获得的迭代器。这些迭代器是 (在 DirectoryStream 中)指定为“弱一致”并且可能不会 打开目录后反映对目录的更新。 ... 无论如何,差异的原因是底层实现 很不一样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-25
          • 2012-01-27
          • 1970-01-01
          • 2013-06-12
          相关资源
          最近更新 更多