我正在寻找一个很好的方法,用java.util.Properties中的所有对来覆盖java.util.Properties中的Java值? 这样更好:
Properties overrideProperties = createPropertiesFromFile(override);
Properties mixProperties = createPropertiesFromFile(basis);
for (Entry<Object, Object> entry : overrideProperties.entrySet()) {
mixProperties.put(entry.getKey(), entry.getValue());
}
答案 0 :(得分:2)
Properties
扩展了Hashtable<Object, Object>
,因此您应该可以使用Hashtable.putAll
方法将overrideProperties
的所有条目添加到mixProperties
:
Properties overrideProperties = createPropertiesFromFile(override);
Properties mixProperties = createPropertiesFromFile(basis);
mixProperties.putAll(overrideProperties);
答案 1 :(得分:2)
这是覆盖属性的另一种方法
Properties properties = new Properties();
properties.load(new FileReader("prop1.properties"));
System.out.println(properties);
properties.load(new FileReader("prop2.properties"));
System.out.println(properties);
答案 2 :(得分:1)
如果要覆盖已存在的仅条目,但不添加覆盖中可能存在的新密钥,请执行以下操作:
overrideProperties.forEach(mixProperties::putIfAbsent);
如果要无条件地写入每个覆盖条目,请使用:
overrideProperties.forEach(mixProperties::put);
Properties
个对象也被设计为在构造时链接在一起,所以在第二种情况下(取决于你的应用程序),做这样的事情也可能是合适的:
Properties defaults = new Properties();
try (InputStream is = Files.newInputStream(Paths.get("defaults.properties"))) {
properties.load(is);
}
Properties custom = new Properties(defaults);
try (InputStream is = Files.newInputStream(Paths.get("override.properties"))) {
custom.load(is);
}