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

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

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью
Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

7.23. Работа со списком системных свойств

В примере показан способ изменения системных свойств класса Properties в автономном приложении Java. С использованием этого способа вы можете расширить список системных свойств, добавив в него, например, рабочие параметры вашего приложения или любую произвольную текстовую информацию.

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

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

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

Как мы уже говорили в описании примера, выполняющего операции с каталогами (раздел "Работа с каталогами"), в классе System определены методы, предназначенные для работы с системными свойствами класса Properties.

Приложению Java доступны значения системных ключей, которые оно может извлечь методом getProperties для анализа:

Properties p = System.getProperties();
String s = p.getProperty("user.home");

Здесь мы извлекли значение ключа с именем user.home, которое содержит путь к домашнему каталогу пользователя в его локальной системе.

В зависимости от изготовителя и версии виртуальной машины Java набор ключей, имеющихся в таблице системных свойств, может меняться. Ниже мы привели ключи, описанные в документации JDK версии 1.1.6:

Ключ Значение
java.version Версия Java
java.vendor Строка, идентифицирующая изготовителя виртуальной машины Java
java.vendor.url Адрес URL изготовителя виртуальной машины Java
java.home Каталог, в который установлена система Java
java.class.version Версия библиотеки классов Java
java.class.path Путь к библиотеке классов Java
os.name Название операционной системы
os.arch Архитектура операционной системы
os.version Версия операционной системы
file.separator Разделитель файлов
path.separator Разделитель пути
line.separator Разделитель строк
user.name Имя пользователя
user.home Домашний каталог пользователя
user.dir Текущий рабочий каталог пользователя

При необходимости программа может получить полный список элементов таблицы системных свойств, добавить в нее новые элементы и даже изменить существующие. Ниже мы кратко расскажем о том, как это можно сделать.

Чтобы получить полный список элементов указанной таблицы и записать его в выходной поток, вы можете воспользоваться методом getProperties, определенном в классе System, и методом list из класса Properties:

Properties p = System.getProperties();
p.list(System.out);

При необходимости вы можете сохранить таблицу свойств в потоке методом save, а затем восстановить методом load:

p.save(someOutputStream);
. . .
p.load(someInputStream); 

А как добавить в таблицу новое свойство?

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

Имя_Свойства=Значение

Если указанное в потоке имя свойства совпадет с именем существующего системного свойства, значение системного свойства будет изменено на новое.

Заметим, что все изменения, внесенные таким образом в таблицу системных свойств, действуют только для текущего запущенного приложения. В следующем разделе мы расскажем как приложение может сохранять наборы свойств в файле на диске а затем восстанавливать его.

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

Наше автономное приложение Java отображает содержимое исходной таблицы свойств, добавляет в его новое свойство и затем отображает снова. Ниже мы показали результат работы этой программы под управлением Sun JavaWorkshop версии 2.0.

Вот содержимое оригинальной таблицы свойств до внесения в нее изменений:

- Original ------------------------
-- listing properties --
user.language=ru
java.home=E:\Java-WorkShop20\JDK
awt.toolkit=sun.awt.windows.WToolkit
file.encoding.pkg=sun.io
java.version=JDK1.1.3/jws:97.08.28
file.separator=\
line.separator=

user.region=RU
file.encoding=Cp1251
java.compiler=sunwjit
java.vendor=Sun Microsystems Inc.
user.timezone=GMT
user.name=frolov
os.arch=x86
os.name=Windows NT
java.vendor.url=http://www.sun.com/
user.dir=E:\Java-WorkShop20\JWS\intel-win32\bin
java.class.path=E:\jws\vol7\ChangeProperty;
E:\Java-Wo...
java.class.version=45.3
os.version=4.0
path.separator=;
user.home=E:\

Ниже мы показали (в сокращенном виде) измененную таблицу войств:

- Modified ------------------------
-- listing properties --
user.language=ru
java.home=E:\Java-WorkShop20\JDK
awt.toolkit=sun.awt.windows.WToolkit
frolov.prgMode=Advanced
file.encoding.pkg=sun.io
java.version=JDK1.1.3/jws:97.08.28
file.separator=\
. . .

Как можно заметить, в таблице свойств появилась новая строка:

frolov.prgMode=Advanced

Эту строку добавила наша программа ChangeProperty.

Рассмотрим исходный текст этой программы.

Сразу после запуска метод main получает содержимое системной таблицы свойств и отображает это содержимое на консоли:

Properties p = System.getProperties();
      
System.out.println(
  "- Original ------------------------");
p.list(System.out);

Для добавления в таблицу свойств новой строки мы создаем выходной поток класса ByteArrayOutputStream, а затем на его основе - выходной форматированный поток класса DataOutputStream:

ByteArrayOutputStream os = 
  new ByteArrayOutputStream();
DataOutputStream dos = 
  new DataOutputStream(os);

Новая строка записывается в этот поток методом writeBytes:

dos.writeBytes(
  "frolov.prgMode=Advanced\n");

Перед тем как закрыть выходной поток, мы преобразуем его в массив байт buf:

byte[] buf;
buf = os.toByteArray();
os.close();

Далее нужно выполнить загрузку нового элемента в таблицу свойств.

Для этого мы прежде всего создаем входной поток класса ByteArrayInputStream на базе массива buf:

ByteArrayInputStream is = 
  new ByteArrayInputStream(buf);

Затем новое свойство загружается методом load:

p.load(is);

При этом новое свойство добавляется в существующую таблицу.

Перед завершением работы программы мы выводим одержимое измененной таблицы свойств на консоль:

System.out.println(
  "\n- Modified ------------------------");
p.list(System.out);

Назад Вперед

[Назад]