Кажется, что java.util.Properties принимает одно значение за каждый ключ. То есть
foo=1
foo=2
не ожидается,
Существует ли класс для этого многозначного листа свойств, который также предоставляет метод загрузки?
Кажется, что java.util.Properties принимает одно значение за каждый ключ. То есть
foo=1
foo=2
не ожидается,
Существует ли класс для этого многозначного листа свойств, который также предоставляет метод загрузки?
Try:
foo=1,2
String[] foos = properties.getProperty("foo").split(",");
Функция java.util.Properties довольно ограничена. Если вам нужен список поддержки, возможно, вы захотите попробовать PropertyConfiguration из конфигурации Apache Commons,
С его помощью вы можете установить любые разделители в свой список, и он будет автоматически разбиваться на вас. Вы также можете делать другие причудливые вещи в файле свойств. Например,
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
Правильный ответ Ника.
Или, если вы можете указать другое имя для каждого значения, вы можете иметь следующие свойства:
my.properties
foo.title=Foo
foo.description=This a big fat foo.
Это не обеспечит способ загрузки, но место для их хранения, вы можете использовать многовалютную карту apache:
"MultiValueMap украшает другую карту, позволяя ей иметь более одного значения для ключа".
Это часто является требованием для параметров http-запроса...
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html
Если у вас более сложный пример, вы можете использовать следующее:
# 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, все следующие значения не будут добавлены. Для улучшения вам может потребоваться заменить разрыв с продолжением и придерживаться максимально допустимых пар.