Загрузка нескольких файлов свойств

Возможно ли укладывать загруженные свойства в 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();
    }
}