1

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

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

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

4

3 回答 3

3

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

有几个是首先重命名文件深度(仅在重命名文件后重命名目录)或仅在您进行时构建文件列表。

于 2011-12-12T14:35:29.533 回答
1

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

于 2011-12-12T14:33:56.080 回答
0

恐怕这是walkFileTree应该的语义。NIO 2 的技术负责人 Alan Bateman 说:

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

于 2011-12-12T14:51:07.073 回答