使用 Java 递归合并多个文件

Merge multiple files recursively using Java

我想将以下 .properties 文件合并为一个。所以例如我有结构:

IAS
├── default
│   ├── gateway.properties
│   └── pennytunnelservice.properties
└── FAT
    ├── gateway.properties
    ├── IAS-jer-1
    │   └── gateway.properties
    └── pennytunnelservice.properties

我的目标是合并两个文件(在这个例子中)pennytunnelservice.properties nad gateway.properties.

default/gateway.properties中例如:

abc=$change.me
def=test

FAT/gateway.properties中例如:

abc=123
ghi=234

FAT/pennytunnelservice.properties中例如:

mno=text

FAT/IAS-jer-1/gateway.properties中例如:

xyz=123
ghi=98

结果应该是包含这些行的两个文件:

pennytunnelservice.properties

mno=text

gateway.properties

abc=123
def=test
ghi=98
xyz=123

你知道怎么做吗?


已更新!!!

我写过这样的东西:

    public static void main(String[] args) throws IOException {

    String dirName = "/IAS";
    File file = new File(dirName);
    Map<String,Properties> files = new HashMap<>();


    Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println(file);

            Properties prop = new Properties();
            FileInputStream input = new FileInputStream(file.toString());

            prop.load(input);
            files.put(file.getFileName().toString(), prop);

            return FileVisitResult.CONTINUE;
        }
    });

结果是

{pennytunnelservice.properties={mno=text}, gateway.properties={abc=123, ghi=234}}

问题是文件加载错误way/order:

IAS/default/pennytunnelservice.properties
IAS/default/gateway.properties
IAS/FAT/IAS-jer-1/gateway.properties
IAS/FAT/pennytunnelservice.properties
IAS/FAT/gateway.properties

应该是:

IAS/default/pennytunnelservice.properties
IAS/default/gateway.properties
IAS/FAT/pennytunnelservice.properties
IAS/FAT/gateway.properties
IAS/FAT/IAS-jer-1/gateway.properties

您需要 Map<String, Properties>。是 .properties 文件名,是从文件中读取的内容。

递归地,使用 FileVisitor 查找 属性 个文件。

对于找到的每个文件,如果已找到相同的文件名,则加载它更新地图中的旧内容。

处理完所有文件后,遍历所有文件名(映射中的键),并为每个文件保存一个新的属性文件,其中包含从所有找到的文件中收集的内容。