Хранение ArrayList и HashMap с использованием java.util.properties - PullRequest
2 голосов
/ 20 ноября 2011

Как я могу сохранить переменную ArrayList и / или HashMap, используя java.util.properties?Если это невозможно, какой другой класс я могу использовать для хранения конфигурации приложения?

Ответы [ 5 ]

4 голосов
/ 20 ноября 2011

Если вам просто нужно сериализовать ваши коллекции в строки, я настоятельно рекомендую XStream . Он использует отражение для сериализации класса в XML. Есть документация, если поведение по умолчанию не работает для класса, который вы хотите сериализовать, но следующее до сих пор работало для меня каждый раз:

XStream xstream = new XStream();
String xml = xstream.toXML(myObject);
MyClass deserializedObject = (MyClass)xstream.fromXML(xml);
assert deserializedObject.equals(myObject);
2 голосов
/ 20 ноября 2011

Итак ... если " не делает этого " не работает для вас, то вам нужно как-то кодировать данные.Одним из распространенных методов является добавление строки к имени каждого элемента.Например, если у меня есть карта MyMap, содержащая a-> 1, b-> 2, c-> 3, я могу сохранить ее в файле свойств:

MyMap.a=1
MyMap.b=2
MyMap.c=3

Для списков вы можете сделать то же самое,просто сопоставление индексов со значениями.Так что, если MyList содержит {a, b, c}

MyList.0=a
MyList.1=b
MyList.2=c

Это взлом, и все, что все остальные сказали, правда.Но иногда ты должен делать то, что должен.

1 голос
/ 20 ноября 2011

java.util.Properties предназначен только для использования со строковыми ключами и значениями.Он наследует методы put () и putAll () от Hashtable, но редко рекомендуется использовать их для «обмана».Рассматривали ли вы просто сохранение информации о вашей конфигурации в HashMap, а не в объекте Properties?Вам придется немного настроить сериализацию, но в любом случае вам придется это делать, поскольку вы не можете воспользоваться преимуществами загрузки по умолчанию в классе Properties.

1 голос
/ 20 ноября 2011

Сохранение HashMap будет простым, поскольку каждый ключ и значение на карте могут быть представлены соответствующим ключом и значением в объекте Properties (см. Метод setProperty в Properties.

Для ArrayList вы можете сделать что-то подобное, ключами будут индексы и значения элементов в соответствующих индексах.

В обоих случаях помните, что в файле свойств хранятся только строки, поэтому вам придется разработать способ представления ключей и значений в ваших объектах в виде строк.

1 голос
/ 20 ноября 2011

Properties в основном Map<String, String> означает, что ключ и значение должны быть объектами String.Если вам нужна более продвинутая конфигурация, вы можете использовать Spring.Это отличная структура, и я использую ее в каждом проекте.Конфигурационные файлы Spring чрезвычайно гибки.

...