Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще раз о хранении настроек приложения 
:(
    Опции темы
LSD
Дата 27.12.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Еще раз о хранении настроек приложения


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

Проектом Jakarta была написана библиотека 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

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.