Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Еще раз о хранении настроек приложения


Автор: LSD 27.12.2005, 09:49
Еще раз о хранении настроек приложения


Способов хранения пользовательских настроек существует достаточно много, и все они имеют свои сильные и слабые стороны. В Java есть стандартный API для хранения настроек PreferencesPreferences представляют стандартный, кроссплатформенный API для хранения настроек приложения. С его помощью можно хранить как глобальные настройки для компьютера, так и индивидуальные для каждого пользователя. При этом разные копии приложения могут работать с общими настройкам. Это удобно для хранения настроек типа расположения панелей инструментов, последних открытых файлов и т.д, т.е. настроек которые будут устанавливаться самим приложением и редактироваться только им же. А если надо чтобы настройки можно было править вручную, иметь несколько конфигураций для запуска, легко переносить настройки с машины на машину, то Preferences не очень хорошо для этого подходят. Для этих целей лучше подходят конфигурационные файлы.

Проектом Jakarta была написана библиотека http://jakarta.apache.org/commons/configuration/. С помошью этой библиотеки можно хранить настройки в виде XML, файлов properties, или в JNDI. По идеологии Commons Configuration очень схожа с Preferences, поэтому переход на нее может быть легким.

Конфигурация хранится в виде пар: ключ-значение. Для имен ключей лучше придерживаться правил именования классов Java, хотя это и не обязательно, но некоторые конфигураторы могут работать не корректно. Ключи образуют иерархию как и package в Java (т.е. ключ application.user является дочерним, по отношению к ключу application).

Рассмотрим для примера работу конфигуратора, для хранения данных использующего XML. При создании конфигуратора, можно указать путь откуда надо загрузить конфигурацию, иначе будет создан "пустой" конфигуратор. Позднее можно загрузить в этот конфигуратор данные с помощью метода load(), методу в качестве параметра передается имя файла откуда надо загрузить данные или производится загрузка данных из файла указанного с помощью setFileName(). Сохранить изменения сделанные в конфигурации можно с помощью метода save(), он принимает те же параметры, что и load(). Кодировку сохраняемого файла, можно задать с помощью setEncoding().

Добавление новых значений в конфигуратор производится с помощью метода addProperty(),изменить значение ключа - setProperty() (если ключ не существует, то он будет создан) , удалить ключ можно с помощью clearProperty(). Можно целиком удалть поддерево ключей - clearTree(). При сохранении данных поддерживается парсинг примитивных типов Java (int, double, boolean). Получить примитивный тип можно с помощью методов get<type>(). Если несколько раз вызвать метод addProperty() для одного и того же названия ключа, то будет создан список значений, получить который можно с помощью getList().

Создадим простенький конфигурационный файл для нашего приложения, пусть в нем хранятся настройки соединения с базой данных, CLASSPATH, и путь к загружаемым ресурсам.
Код
XMLConfiguration config = new XMLConfiguration();
config.setEncoding("UTF-8");
config.setFileName("sample_conf.xml");
config.setRootElementName("sample-xml-configuration");

config.addProperty("database.name", "Main Oracle server");
config.addProperty("database.driver", "oracle.jdbc.OracleDriver");
config.addProperty("database.URL", "jdbc:oracle:OCI8:@ORCL");
config.addProperty("database.user", "scott");
config.addProperty("database.password", "tiger");
config.addProperty("classpath", ".;C:\\Oracle\\ora10\\jdbc\\lib\\ojdbc14.jar");
config.addProperty("resource.directory", "C:\\Program Files\\Sample Application\\resources");
config.addProperty("resource.file-type", "gif");
config.addProperty("resource.file-type", "jpg");
config.addProperty("resource.file-type", "jpeg");
config.addProperty("resource.file-type", "png");
config.addProperty("resource.file-type", "bmp");

config.save();

В результате получим такой XML:
Код
<?xml version="1.0" encoding="UTF-8"?>
<sample-xml-configuration>
  <database>
    <name>Main Oracle server</name>
    <driver>oracle.jdbc.OracleDriver</driver>
    <URL>jdbc:oracle:OCI8:@ORCL</URL>
    <user>scott</user>
    <password>tiger</password>
  </database>
  <classpath>.;C:\Oracle\ora10\jdbc\lib\ojdbc14.jar</classpath>
  <resource>
    <directory>C:\Program Files\Sample Application\resources</directory>
    <file-type>gif</file-type>
    <file-type>jpg</file-type>
    <file-type>jpeg</file-type>
    <file-type>png</file-type>
    <file-type>bmp</file-type>
  </resource>
</sample-xml-configuration>


Теперь загрузим настройки:
Код
XMLConfiguration config = new XMLConfiguration("sample_conf.xml");
System.out.println("XMLConfiguration:");
for(Iterator iter = config.getKeys(); iter.hasNext(); )
{
  String item = (String) iter.next();
  System.out.println("  " + item + " = " + config.getProperty(item));
}

В результате получим:
Код
XMLConfiguration:
  classpath = .;C:\Oracle\ora10\jdbc\lib\ojdbc14.jar
  resource.directory = C:\Program Files\Sample Application\resources
  resource.file-type = [gif, jpg, jpeg, png, bmp]
  database.name = Main Oracle server
  database.user = scott
  database.driver = oracle.jdbc.OracleDriver
  database.URL = jdbc:oracle:OCI8:@ORCL
  database.password = tiger

Все настройки успешно были загружены.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)