是否可以在 Java 中堆叠加载的属性?例如我可以这样做:
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));
并从两者访问属性?
是否可以在 Java 中堆叠加载的属性?例如我可以这样做:
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));
并从两者访问属性?
你可以这样做:
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
Properties properties2 = new Properties();
properties2.load(new FileInputStream("file2.properties"));
properties.putAll(properties2);
注意:维护的所有密钥都是唯一的。因此,稍后使用相同键加载的属性将被覆盖。只是为了你的参考:)
是的,属性堆栈。Properties
扩展Hashtable
并load()
简单地调用put()
每个键值对。
来自Source的相关代码:
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
换句话说,从文件加载不会清除当前条目。但是,请注意,如果两个文件包含具有相同键的条目,则第一个将被覆盖。
其实,是。你可以这样做。如果任何属性重叠,则新加载的属性将取代旧的。
是的,您需要在构造函数中传递默认属性文件。像这样,您可以将它们链接起来。
例如:
Properties properties1 = new Properties();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file1.properties"))){
properties1.load(bis);
}
Properties properties2 = new Properties(properties1);
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file2.properties"))){
properties2.load(bis);
}
这也应该有效。如果在 file1.properties 和 file2.properties 中定义了相同的属性,则 file2.properties 中的属性将生效。
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));
现在属性映射将具有来自两个文件的属性。如果相同的键出现在 file1 和 file2 中,则来自 file1 的键的值将在属性中更新为 file2 中的值,因为我先调用 file1 然后调用 file2。
您可以更动态地执行此操作,使用不确定数量的文件。
此方法的参数应该是一个包含属性文件路径的列表。我将方法设为静态,将其放在具有其他消息处理相关功能的类中,并在需要时简单地调用它:
public static Properties loadPropertiesFiles(LinkedList<String> files) {
try {
Properties properties = new Properties();
for(String f:files) {
Resource resource = new ClassPathResource( f );
Properties tempProp = PropertiesLoaderUtils.loadProperties(resource);
properties.putAll(tempProp);
}
return properties;
}
catch(IOException ioe) {
return new Properties();
}
}