Назад
Вперед
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
Назад Вперед |