我正在建立产品目录,我的程序通过将详细信息保存到文件来跟踪产品详细信息。如果产品是没有变化的单个产品,则将其保存到MyProgram\Products\Product Identifier
。如果产品有版本,则将其保存到MyProgram\Products\Group Identifier\Product Identifier
。由于直到程序后期,我都不知道产品是否会有变化,因此我开始将所有产品详细信息(包括图像,属性和日志数据)保存在以下目录中:MyProgram\Products\Product Identifier
(某些数据存储在子文件夹中)。但是,如果发现该产品具有变化形式,则需要将所有文件夹(和子文件夹)的内容从\Product Identifier
移到\Group Identifier\Product Identifier
。
我知道有两种移动文件的方法。首先,按照this响应中所述使用FileUtils.copyDirectory()
。其次,使用this thread中所述的NIO Files.copy()
。
根据文档FileUtils.copyDirectory()
:
将整个目录复制到保存文件日期的新位置。 此方法复制指定的目录及其所有子目录 目录和文件到指定的目的地。目的地是 目录的新位置和名称。
如果目标目录不存在,则创建它。如果 目标目录确实存在,然后此方法合并源 (目的地),(来源)。
在我的情况下,<目标>文件夹中可能存在部分,全部或全部文件。如果目标中存在文件,则我不想替换(覆盖)现有数据。换句话说,我希望目标文件优先。我知道有一个similar question on SO,但是我的需求有所不同,因为目标可能包含带有键/值对的“属性”文件。在键存在的情况下,我不想用源中的值覆盖该值。但是,如果键不存在,那么我想将键/值添加到目标文件。换句话说,链接线程中建议的解决方案仅检查文件是否存在。我想分析文件的实际内容,如果不存在则追加数据(无冲突)。并忽略数据(不复制)(如果目标中存在)。此外,源中可能包含我想附加到目标中日志文件的开始的产品日志信息。在这种情况下,即使目标中存在文件名,也必须附加数据,因为它不希望替换目标中的内容,而只是添加/追加。
我该怎么做?