2011-12-12 187 views
1

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

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

我认为这是由于这个子目录已被打开打开,所以不能对其文件/文件夹进行更改。任何想法解决这个问题?

回答

1

这可以通过重新命名从最下面的第一个到最上面的目录来解决。

3

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

围绕这一点是一个重新命名文件深度优先(只重命名文件后重命名目录)或只建立文件的列表,你去。

0

恐怕这是walkFileTree的语义应该是什么。艾伦贝特曼,NIO 2的技术领导者表示:

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

相关问题