Wiele wartości w Javie.util.Właściwości

Wydaje się, że java.util.Properties przyjmuje jedną wartość na klucz propery. Czyli

foo=1
foo=2

Nie oczekuje się,

Czy istnieje klasa dla tego rodzaju arkusza właściwości wielowartościowych, która również dostarcza metodę load?

Author: ClueMinus, 2009-09-16

5 answers

Try:

foo=1,2

String[] foos = properties.getProperty("foo").split(",");
 62
Author: Nick Holt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-07 22:00:29

Java.util.Funkcja właściwości jest dość ograniczona. Jeśli chcesz listę wsparcia, spróbuj PropertyConfiguration z Apache Commons Configuration,

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

Za jego pomocą możesz ustawić dowolne ograniczniki na swojej liście i automatycznie się podzieli. Możesz również robić inne fantazyjne rzeczy w pliku właściwości. Na przykład,

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

Możesz go odzyskać jak to,

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
 20
Author: ZZ Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-16 12:28:08

Poprawna odpowiedź Nicka.

Lub, jeśli możesz nadać inną nazwę każdej wartości, możesz mieć swoje właściwości:

    my.properties

    foo.title=Foo
    foo.description=This a big fat foo.
 4
Author: KLE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-16 12:33:56

To nie dostarczy metody load, ale miejsca do ich przechowywania można użyć apache commons multivaluemap:

" Mapa wielowartościowa zdobi inną mapę, dzięki czemu może mieć więcej niż jedną wartość dla klucza. "

Jest to często wymóg dla parametrów żądania http...

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

 0
Author: Pablojim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-16 13:07:51

Jeśli masz bardziej złożony przykład, możesz użyć następującego:

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

W Twoim kodzie będziesz musiał wyszukać:

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);
}

Wada: aktualizacja pliku właściwości. Jeśli usuniesz wartości *2, wszystkie poniższe wartości nie zostaną dodane. Aby poprawić, możesz zastąpić przerwę kontynuacją i trzymać się maksymalnie dozwolonych par.

 0
Author: Clerenz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 23:08:14