Копировать файлы из одного каталога в другой, не перезаписывая существующий файл реквизита [Java] - PullRequest
0 голосов
/ 06 июня 2019

Я создаю каталог продуктов, и моя программа отслеживает детали продуктов, сохраняя их в файл. Если продукт представляет собой один продукт без изменений, он сохраняется в 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' с парами ключ / значение. В случае, если ключ существует, я не хочу перезаписывать значение значением из источника. Однако, если ключ не существует, я хочу добавить ключ / значение в целевой файл. Другими словами, решение, предлагаемое в связанном потоке, только проверяет, существует ли файл или нет. Я хочу проанализировать фактическое содержимое файла и добавить данные, если они отсутствуют (без конфликтов). и игнорировать данные (не копировать), если они присутствуют в месте назначения. Кроме того, источник может содержать информацию журнала продукта, которую я хочу добавить к началу файла журнала в месте назначения. В этом случае данные должны быть добавлены, даже если имя файла существует в месте назначения, поскольку ожидается, что он не заменит содержимое в месте назначения, а только добавит / добавит его.

Как я могу это сделать?

...