重命名目录和一些包含文件/子目录

时间:2011-12-12 14:30:48

标签: java file-io file-rename

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

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

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

3 个答案:

答案 0 :(得分:3)

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

其中一个问题是首先重命名文件深度(仅在重命名文件后重命名目录)或者只是在你去的时候构建文件列表。

答案 1 :(得分:1)

这可以通过将目录从“最下面的第一个”重命名为“最后一个”来解决。

答案 2 :(得分:0)

我担心walkFileTree的语义应该是什么。 NIO 2的技术负责人Alan Bateman说:

  

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