Несколько значений в java.util.Properties - PullRequest
36 голосов
/ 16 сентября 2009

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

foo=1
foo=2

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

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

Ответы [ 5 ]

64 голосов
/ 16 сентября 2009

Попробуйте:

foo=1,2

String[] foos = properties.getProperty("foo").split(",");
20 голосов
/ 16 сентября 2009

Функция 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
4 голосов
/ 16 сентября 2009

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

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

    my.properties

    foo.title=Foo
    foo.description=This a big fat foo.
0 голосов
/ 11 августа 2017

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

# 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, все следующие значения не будут добавлены. Для улучшения вы можете заменить разрыв на продолжение и придерживаться максимально допустимого числа пар.

0 голосов
/ 16 сентября 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...