Я создаю каталог продуктов, и моя программа отслеживает детали продуктов, сохраняя их в файл. Если продукт представляет собой один продукт без изменений, он сохраняется в MyProgram\Products\Product Identifier
. Если товар имеет вариацию, он сохраняется в MyProgram\Products\Group Identifier\Product Identifier
. Поскольку я не знаю, есть ли у продукта варианты до более позднего этапа в программе, я начинаю сохранять все сведения о продукте (включая изображения, свойства и данные журнала) в каталоге: MyProgram\Products\Product Identifier
(некоторые данные хранятся в подпапках). Однако, если выясняется, что у продукта есть вариации, мне нужно переместить содержимое всех папок (и подпапок) с \Product Identifier
на \Group Identifier\Product Identifier
.
Я знаю, что есть два способа перемещения файлов. Во-первых, используя FileUtils.copyDirectory()
, как описано в этом ответе. Во-вторых, используя NIO Files.copy()
, как описано в этой теме .
Согласно документации, FileUtils.copyDirectory()
:
Копирует весь каталог в новое место, сохраняя даты файла.
Этот метод копирует указанный каталог и все его дочерние
каталоги и файлы по указанному адресу. Пункт назначения
новое местоположение и имя каталога.
Каталог назначения создается, если он не существует. Если
каталог назначения существует, тогда этот метод объединяет источник
с адресатом, с источником, имеющим приоритет .
В моем случае возможно , что некоторые, все или ни одного файлов могут присутствовать в папке 'destination'. Если файл существует в месте назначения, я не хочу заменять (перезаписывать) существующие данные. Другими словами, я хочу, чтобы файл destination имел приоритет. Я знаю, что на SO существует вопрос, похожий на этот вопрос, но мои потребности немного отличаются в том смысле, что в месте назначения может содержаться файл 'properties' с парами ключ / значение. В случае, если ключ существует, я не хочу перезаписывать значение значением из источника. Однако, если ключ не существует, я хочу добавить ключ / значение в целевой файл. Другими словами, решение, предлагаемое в связанном потоке, только проверяет, существует ли файл или нет. Я хочу проанализировать фактическое содержимое файла и добавить данные, если они отсутствуют (без конфликтов). и игнорировать данные (не копировать), если они присутствуют в месте назначения. Кроме того, источник может содержать информацию журнала продукта, которую я хочу добавить к началу файла журнала в месте назначения. В этом случае данные должны быть добавлены, даже если имя файла существует в месте назначения, поскольку ожидается, что он не заменит содержимое в месте назначения, а только добавит / добавит его.
Как я могу это сделать?