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