Читаем свойства окружения в Java с помощью System.getProperties()

User Rating: 0 / 5

В Java есть возможность получить системные свойства - с помощью вызова метода getProperties() в стандартном классе System. Давайте напишем простую программу, которая отобразит системные свойства нашего окружения, на котором запускается наша Java-программа:

package ru.allineed.samples.system.properties;

import java.util.Properties;

/**
 * Простое Java-приложение, получающее доступ к свойствам системы и выводящее их на консоль
 * @author allineed.ru
 */
public class SystemPropertiesExample
{
    public static void main( String[] args )
    {
        Properties properties = System.getProperties();
        properties.stringPropertyNames().forEach(
                pName -> System.out.println(
                        String.format("System Property: { name = \"%s\", value = \"%s\" }", pName, properties.getProperty(pName))
                )
        );
    }
}

Как видно из примера выше, мы создали класс с именем SystemPropertiesExample и единственным методом main() в качестве точки входа нашей программы. В этом методе мы объявляем переменную properties и присваиваем ей значение, которое возвращает вызов System.getProperties()

Далее мы получаем через вызов метода stringPropertyNames() доступ к набору (его тип Set<String>), состоящему из названий системных свойств и с помощью оператора forEach перебираем все системные свойства. Обращаю внимание, что этот оператор доступен, начиная с версии Java 1.8, поэтому если у Вас установлена версия ниже, для работы примера Вам понадобится установить JDK 8 или старше и выставить уровень языка в вашей IDE равным 1.8.

Во время пробега по всем свойствам, текущее имя системного свойства будет записываться в переменную pName, а действие, которое мы производим над текущим именем свойства - это вывод на консоль нашей программы отформатированной с помощью String.format() строки, в которой мы выводим собственно имя свойства и его значение, которое получаем через вызов properties.getProperty(pName).

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

System Property: { name = "java.runtime.name", value = "Java(TM) SE Runtime Environment" }
System Property: { name = "sun.boot.library.path", value = "C:\Program Files\Java\jdk1.8.0_271\jre\bin" }
System Property: { name = "java.vm.version", value = "25.271-b09" }
System Property: { name = "java.vm.vendor", value = "Oracle Corporation" }
System Property: { name = "java.vendor.url", value = "http://java.oracle.com/" }
System Property: { name = "path.separator", value = ";" }
System Property: { name = "java.vm.name", value = "Java HotSpot(TM) 64-Bit Server VM" }
System Property: { name = "file.encoding.pkg", value = "sun.io" }
System Property: { name = "user.script", value = "" }
System Property: { name = "user.country", value = "RU" }
System Property: { name = "sun.java.launcher", value = "SUN_STANDARD" }
System Property: { name = "sun.os.patch.level", value = "" }
System Property: { name = "java.vm.specification.name", value = "Java Virtual Machine Specification" }
System Property: { name = "user.dir", value = "C:\JavaProjects\AllineedRuSamples" }
System Property: { name = "java.runtime.version", value = "1.8.0_271-b09" }
System Property: { name = "java.awt.graphicsenv", value = "sun.awt.Win32GraphicsEnvironment" }
System Property: { name = "java.endorsed.dirs", value = "C:\Program Files\Java\jdk1.8.0_271\jre\lib\endorsed" }
System Property: { name = "os.arch", value = "amd64" }
System Property: { name = "java.io.tmpdir", value = "C:\Users\D694~1\AppData\Local\Temp\" }
System Property: { name = "line.separator", value = "
" }
System Property: { name = "java.vm.specification.vendor", value = "Oracle Corporation" }
System Property: { name = "user.variant", value = "" }
System Property: { name = "os.name", value = "Windows 10" }
System Property: { name = "sun.jnu.encoding", value = "Cp1251" }
System Property: { name = "java.specification.name", value = "Java Platform API Specification" }
System Property: { name = "java.class.version", value = "52.0" }
System Property: { name = "sun.management.compiler", value = "HotSpot 64-Bit Tiered Compilers" }
System Property: { name = "os.version", value = "10.0" }
System Property: { name = "user.home", value = "C:\Users\компьютер" }
System Property: { name = "user.timezone", value = "Europe/Moscow" }
System Property: { name = "java.awt.printerjob", value = "sun.awt.windows.WPrinterJob" }
System Property: { name = "file.encoding", value = "UTF-8" }
System Property: { name = "java.specification.version", value = "1.8" }
System Property: { name = "user.name", value = "компьютер" }
System Property: { name = "java.vm.specification.version", value = "1.8" }
System Property: { name = "sun.arch.data.model", value = "64" }
System Property: { name = "java.home", value = "C:\Program Files\Java\jdk1.8.0_271\jre" }
System Property: { name = "sun.java.command", value = "ru.allineed.samples.system.properties.SystemPropertiesExample" }
System Property: { name = "java.specification.vendor", value = "Oracle Corporation" }
System Property: { name = "user.language", value = "ru" }
System Property: { name = "awt.toolkit", value = "sun.awt.windows.WToolkit" }
System Property: { name = "java.vm.info", value = "mixed mode" }
System Property: { name = "java.version", value = "1.8.0_271" }
System Property: { name = "java.ext.dirs", value = "C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext;C:\Windows\Sun\Java\lib\ext" }
System Property: { name = "java.vendor", value = "Oracle Corporation" }
System Property: { name = "file.separator", value = "\" }
System Property: { name = "java.vendor.url.bug", value = "http://bugreport.sun.com/bugreport/" }
System Property: { name = "sun.cpu.endian", value = "little" }
System Property: { name = "sun.io.unicode.encoding", value = "UnicodeLittle" }
System Property: { name = "sun.desktop", value = "windows" }
System Property: { name = "sun.cpu.isalist", value = "amd64" }

Process finished with exit code 0

Некоторые системные свойства, такие как java.library.pathjava.class.pathsun.boot.class.path я исключил из вывода с целью сокращения объема текста, у Вас в случае выполнения примера они должны отобразиться.

Напоследок приведу список наиболее популярных и используемых системных свойств, которые часто требуется получать через вызов System.getProperties() в программах на Java:

  • java.home - директория установки Java Runtime Environment (JRE)
  • file.separator - символ, который разделяет компоненты пути к файлу. Это "/" для UNIX и "\" для Windows
  • java.class.path - путь, используемый для поиска директорий и JAR архивов, содержащих class-файлы. Элементы class path разделяются между собой платформенно-специфичным символом, который задаётся через свойство path.separator
  • path.separator - символ разделения путей, используемый в свойстве java.class.path
  • user.dir - пользовательский рабочий каталог
  • user.home - домашний каталог пользователя
  • user.name - имя аккаунта текущего пользователя
  • os.name - название операционной системы
  • os.version - версия операционной системы
  • os.arch - архитектура операционной системы
  • line.separator - последовательность символов, используемая операционной системой для разделения строк в текстовых файлах
  • java.version - номер версии JRE
  • java.vendor - название производителя (вендора) JRE
  • java.vendor.url - URL, ссылающийся на сайт производителя JRE

Как Вы могли заметить по выводу на консоль нашей небольшой программы, системных свойств больше, чем в данном списке, но я привёл описание наиболее используемых на практике.

Яндекс.Метрика