Переименование каталога и некоторых содержащих его файлов / подкаталогов - PullRequest
1 голос
/ 12 декабря 2011

Я недавно делаю какое-то программное обеспечение Java, чтобы найти некоторые файлы / каталоги в папке, которая, если их имя содержит определенный текст, будет переименована в другое имя. Я использую Files.walkFileTree для обхода каталогов, и если найден один файл / каталоги, соответствующие, он будет переименован с использованием метода File.renameTo.

Но здесь я столкнулся с проблемой, если один подкаталог был переименован, все операции переименования в этом подкаталоге завершатся неудачно.

Я думаю, что это было вызвано тем, что этот подкаталог помечен как открытый, поэтому его файлы / папки не могут быть изменены. Есть идеи, чтобы решить это?

Ответы [ 3 ]

3 голосов
/ 12 декабря 2011

Это произойдет, если сначала будут определены все имена, а затем вы переименуете каталог, а затем переименуете файлы, которые в нем содержатся.

Несколько способов было сначала переименовать файлы по глубине (переименовывать каталог только после переименования файлов) или создавать список файлов только на ходу.

1 голос
/ 12 декабря 2011

Эту проблему можно решить, переименовав каталоги с «от самого нижнего до самого верхнего до последнего».

0 голосов
/ 12 декабря 2011

Боюсь, это то, чем должна быть семантика walkFileTree. Алан Бейтман, технический директор NIO 2, сказал:

Метод служебной программы walkFileTree является внутренним итератором, который использует итераторов, полученных из потоков каталогов. Эти итераторы указанный (в DirectoryStream), чтобы быть "слабо согласованным" и не может отражать обновления в каталоге после открытия каталога. ... В любом случае, причина разницы в том, что основная реализация очень разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...