В Java есть возможность получить системные свойства - с помощью вызова метода getProperties() в стандартном классе System. Давайте напишем простую программу, которая отобразит системные свойства нашего окружения, на котором запускается наша Java-программа:
package ru.allineed.samples.properties;
import java.util.Properties;
public class SystemPropertiesExample {
public static void main( String[] args )
{
Properties properties = System.getProperties();
properties.stringPropertyNames().forEach(
pName -> System.out.printf("System Property: { name = \"%s\", value = \"%s\" }%n", pName, properties.getProperty(pName))
);
}
}
Как видно из примера выше, мы создали класс с именем SystemPropertiesExample и единственным методом main() в качестве точки входа нашей программы. В этом методе мы объявляем переменную properties и присваиваем ей значение, которое возвращает вызов System.getProperties().
Далее мы получаем через вызов метода stringPropertyNames() доступ к набору (его тип Set<String>), состоящему из названий системных свойств и с помощью оператора forEach перебираем все системные свойства. Обращаю внимание, что этот оператор доступен, начиная с версии Java 1.8, поэтому если у Вас установлена версия ниже, для работы примера Вам понадобится установить JDK 8 или старше и выставить уровень языка в вашей IDE равным 1.8.
Во время пробега по всем свойствам, текущее имя системного свойства будет записываться в переменную pName, а действие, которое мы производим над текущим именем свойства - это вывод на консоль нашей программы отформатированной с помощью функции System.out.printf() строки, в которой мы выводим собственно имя свойства и его значение, которое получаем через вызов 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.path, java.class.path, sun.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
Как Вы могли заметить по выводу на консоль нашей небольшой программы, системных свойств больше, чем в данном списке, но я привёл описание наиболее используемых на практике.
Примеры из этой статьи: https://github.com/AllineedRu/JavaExamples/blob/main/allineed-core/src/main/java/ru/allineed/samples/properties/SystemPropertiesExample.java