Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties

Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

Назад Вперед

1.15. Словарь на базе класса Properties

Еще один пример телефонного справочника мы создали на базе класса Properties. Этот класс позволяет сохранять записи в файле на диске, а затем восстанавливать их.

Наш пример создает словарь из нескольких записей, сохраняет его на диске. Затем программа восстанавливает его и отображает содержимое словаря на консоли.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Класс Properties создан на базе класса Hashtable. Он позволяет хранить пары "имя свойства - значение свойства", причем не только в оперативной памяти, но и в файлах на диске. Поэтому этот класс идеально подходит, например, для хранения параметров приложений Java.

Напомним, что в Windows версии 3.1 для этой цели были предусмотрены файлы win.ini, system.ini, а также ряд функций программного интерфейса операционной системы. В более новых версиях Windows параметры приложений хранятся в регистрационной базе данных Registry.

Описание примера

Наша программа создает два объекта класса Propreties:

Properties prop = new Properties();
Properties prop1 = new Properties();

Первый из них с именем prop заполняется записями и сохраняется на диске в файле. Этот файл затем загружается в объект prop1.

Словарь prop заполняется методом put, как это показано ниже:

prop.put("Ivanov",  "322-223-228");
prop.put("Petrov",  "326-211-227");
prop.put("Sidorov", "311-225-263");
prop.put("Ivanoff", "355-243-229");

Здесь через первый параметр мы передаем имя свойства (в данном случае это фамилия), а через второй - значение свойства ( у нас это номер телефона).

Так как класс Propreties создан на базе класса Hashtable, мы можем использовать для работы с нашим словарем все методы класса Hashtable. В частности, нам доступен метод keys, позволяющий получить список всех ключей, хранящихся в словаре:

Enumeration en = prop.keys();

Полученный с помощью этого метода список мы используем для отображения на консоли содержимого словаря:

while(en.hasMoreElements())
{
  szStr = (String)en.nextElement();
  szPhone = (String)prop.get(szStr);
  System.out.println(szStr + ": " + szPhone); 
}

Здесь по ключу, извлеченному из списка методом nextElement мы получаем значение соответствующего свойства методом get.

Заполнив словарь, мы открываем выходной поток данных и сохраняем содержимое словаря в файле:

static DataOutputStream os;
. . .
try
{
  os = new DataOutputStream(
    new FileOutputStream("prop.txt"));
         
  prop.save(os, "My properties");
  os.close();
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

Сохранение выполняется методом save. В качестве первого параметра этому методу передается ссылка на выходной поток, связанный с файлом prop.txt, а в качестве второго - однострочный комментарий. Заметим, что в тексте комментария не должны встречаться символы \n и \r.

После сохранения словаря мы закрываем поток, вызывая метод close.

Далее программа снова открывает файл prop.txt, связывая его с входным потоком. Свойства из этого файла загружаются в объект prop1, как это показано ниже:

static DataInputStream is;
. . .
try
{
  is = new DataInputStream(
    new FileInputStream("prop.txt"));
  prop1.load(is);
  is.close();
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

Отобразив содержимое prop1 на консоли мы можем убедится в том, что свойства загружены правильно:

System.out.println("\nLoaded properties:\n"); 
Enumeration en1 = prop1.keys();
    
while(en1.hasMoreElements())
{
  szStr = (String)en1.nextElement();
  szPhone = (String)prop1.get(szStr);
    System.out.println(szStr + ": " + szPhone); 
}

Вот что мы увидим на экране, запустив нашу программу:

Properties:

Ivanov: 322-223-228
Petrov: 326-211-227
Ivanoff: 355-243-229
Sidorov: 311-225-263

Loaded properties:

Ivanov: 322-223-228
Petrov: 326-211-227
Ivanoff: 355-243-229
Sidorov: 311-225-263

Что же касается файла prop.txt, то его содержимое показано ниже:

#My properties
#Tue May 05 15:10:32 GMT+01:00 1998
Ivanov=322-223-228
Petrov=326-211-227
Ivanoff=355-243-229
Sidorov=311-225-263

Назад Вперед

[Назад]