Подтвердить что ты не робот

Несколько значений в java.util.Properties

Кажется, что java.util.Properties принимает одно значение за каждый ключ. То есть

foo=1
foo=2

не ожидается,

Существует ли класс для этого многозначного листа свойств, который также предоставляет метод загрузки?

4b9b3361

Ответ 1

Try:

foo=1,2

String[] foos = properties.getProperty("foo").split(",");

Ответ 2

Функция java.util.Properties довольно ограничена. Если вам нужен список поддержки, возможно, вы захотите попробовать PropertyConfiguration из конфигурации Apache Commons,

http://commons.apache.org/configuration/userguide/howto_properties.html#Using_PropertiesConfiguration

С его помощью вы можете установить любые разделители в свой список, и он будет автоматически разбиваться на вас. Вы также можете делать другие причудливые вещи в файле свойств. Например,

foo=item1, item2
bar=${foo}, item3
number=123

Вы можете получить его так,

Configuration config = new PropertiesConfiguration("your.properties");
String[] items = config.getStringArray("bar"); // return {"item1", "item2", "item3"}
int number = config.getInt("number", 456); // 456 is default value

Ответ 3

Правильный ответ Ника.

Или, если вы можете указать другое имя для каждого значения, вы можете иметь следующие свойства:

    my.properties

    foo.title=Foo
    foo.description=This a big fat foo.

Ответ 4

Это не обеспечит способ загрузки, но место для их хранения, вы можете использовать многовалютную карту apache:

"MultiValueMap украшает другую карту, позволяя ей иметь более одного значения для ключа".

Это часто является требованием для параметров http-запроса...

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html

Ответ 5

Если у вас более сложный пример, вы можете использовать следующее:

# pairs of properties
source1=foo
target1=bar
source2=anotherFoo
target2=regardingBar
source3= ...

В вашем коде вам нужно будет искать:

Map<String, String> myMap = new HashMap<>();
for (int i=1; i<max; i++) {
  String source = properties.get("source" + i);
  String target = properties.get("target" + i);
  if (source == null || target == null) {
    break;
  }
  myMap.put(source, target);
}

Недостаток: обновление файла свойств. Если вы удалите значения * 2, все следующие значения не будут добавлены. Для улучшения вам может потребоваться заменить разрыв с продолжением и придерживаться максимально допустимых пар.