Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


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

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


Способов хранения пользовательских настроек существует достаточно много, и все они имеют свои сильные и слабые стороны. В Java есть стандартный API для хранения настроек Preferences. Preferences представляют стандартный, кроссплатформенный 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

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






Просмотров: 4887

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную