使用 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 查找 属性 个文件。
对于找到的每个文件,如果已找到相同的文件名,则加载它更新地图中的旧内容。
处理完所有文件后,遍历所有文件名(映射中的键),并为每个文件保存一个新的属性文件,其中包含从所有找到的文件中收集的内容。
我想将以下 .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 查找 属性 个文件。
对于找到的每个文件,如果已找到相同的文件名,则加载它更新地图中的旧内容。
处理完所有文件后,遍历所有文件名(映射中的键),并为每个文件保存一个新的属性文件,其中包含从所有找到的文件中收集的内容。