Переименование каталога и некоторых содержащих его файлов/подкаталогов

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

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

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


person ttddlplp    schedule 12.12.2011    source источник


Ответы (3)


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

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

person Peter Lawrey    schedule 12.12.2011

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

person Andrew Thompson    schedule 12.12.2011

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

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

person edwardw    schedule 12.12.2011