Загрузка нескольких файлов свойств
Возможно ли укладывать загруженные свойства в Java? Например, я могу:
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));
и свойства доступа от обоих?
Ответы
Ответ 1
Вы можете сделать это:
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
Properties properties2 = new Properties();
properties2.load(new FileInputStream("file2.properties"));
properties.putAll(properties2);
Ответ 2
Да, стек свойств. Properties
extends Hashtable
и load()
просто вызывает put()
для каждой пары значений ключа.
Соответствующий код из Источник:
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
Другими словами, загрузка из файла не очищает текущие записи. Однако обратите внимание, что если два файла содержат записи с одним и тем же ключом, первый будет перезаписан.
Ответ 3
Собственно, да. Вы можете сделать это. Если какое-либо из свойств перекрывается, новое загруженное свойство будет иметь место с более старым.
Ответ 4
Да, вам нужно передать файл свойств по умолчанию в конструкторе. Подобным образом вы можете связать их.
например:.
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);
}
Ответ 5
Это также должно работать. Если одно и то же свойство определено в файле file1.properties и file2.properties, свойство file2.properties будет действовать.
Properties properties = new Properties();
properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));
Теперь карта свойств будет иметь свойства из обоих файлов. Если тот же ключ появляется в файлах1 и файле2, значение ключа из файла1 будет обновляться в свойствах со значением в файле2, так как я вызываю файл1, а затем файл2.
Ответ 6
Вы можете сделать это немного более динамично, работая с неопределенным количеством файлов.
Параметр для этого метода должен быть списком с указанием пути к файлу свойств. Я сделал метод static, поместил его в класс с другими функциями обработки сообщений и просто позвонил ему, когда мне это нужно:
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();
}
}