Как я могу получить значение системной переменной в Java?

Как я могу получить значение системной переменной, которое присутствует в

MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables

в Яве?

Изменить

Я использовал метод System.getenv().

Если я дам

System.out.println(System.getenv("JAVA_HOME"));

и он показывает значение null, если я попробую то же самое для созданной мной системной переменной

System.out.println(System.getenv("DBE"));

person raja    schedule 10.02.2009    source источник
comment
Вы можете попробовать перезапустить процесс запроса (в моем случае это NetBeans).   -  person Kotodid    schedule 29.08.2013
comment
Я заметил, что вариант перезапуска из eclipse не работает. Просто закройте приложение и запустите его снова.   -  person Yasin    schedule 01.11.2016
comment
Перезапуск IntelliJ решил мою проблему.   -  person Bhushan Karmarkar    schedule 19.02.2019
comment
У меня сработал перезапуск системы, возможно, JVM сохраняет кеш значений при первом запуске, из-за чего новые переменные не обнаруживаются.   -  person sumitkanoje    schedule 21.02.2019
comment
похоже, что значение DBE не экспортируется   -  person Rishabh Agarwal    schedule 23.09.2020


Ответы (8)



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

Чтобы получить доступ к текущему значению общесистемной переменной или пользовательской переменной в Java, см. Ниже:

String javaHome = System.getenv("JAVA_HOME");

Дополнительную информацию о переменных среды см. На этой странице википедии.

Также убедитесь, что переменная среды, которую вы пытаетесь прочитать, правильно установлена ​​перед вызовом Java, выполнив:

echo %MYENVVAR%

Вы должны увидеть значение переменной окружения. В противном случае вам может потребоваться повторно открыть оболочку (DOS) или выйти из системы и снова войти в нее.

person Elijah    schedule 10.02.2009
comment
Привет .. Я использовал метод System.getenv () .. Значение его печати, если я даю System.out.println (System.getenv (JAVA_HOME)); и показывает нулевое значение, если я даю системную переменную, созданную мной (System.out.println (System.getenv (DBE)); - person raja; 10.02.2009
comment
getenv должен быть в маленьком регистре вместо getEnv, верно? - person Pratik Khadloya; 25.09.2014
comment
Если я сделаю echo %var%, он напечатает %var%. Если я попробую вместо этого echo $var, он сработает и отобразит значение этой переменной env. Мой getenv возвращает ноль. - person dialex; 18.01.2017
comment
@dialex %var% используется для Windows, $var для систем unix / linux / MacOS. - person Al-Mothafar; 19.01.2017

При получении свойств системы / среды есть несколько интересных деталей.

Сначала System.getenv(String) был введен в прошлое, а затем объявлен устаревшим. Устаревание (по глупости, IHMO) продолжалось вплоть до JSE 1.4.

Получил повторно представлен в JSE 5.

Они устанавливаются с помощью панели переменных среды в Windows. Изменения переменных могут не быть приняты до тех пор, пока ваша текущая виртуальная машина не будет выключена, а экземпляр CMD.exe не будет завершен.

В отличие от свойств среды Java также имеет системные свойства Java, доступные через _ 2_. Эти переменные могут быть инициализированы при запуске виртуальной машины с использованием ряда -Dname=value аргументов командной строки. Например, значения свойств maxInMemory и pagingDirectory устанавливаются в следующей команде:

C:\> java.exe -DmaxInMemory=100M -DpagingDirectory=c:\temp -jar myApp.jar

Эти свойства можно изменять во время выполнения, исключая ограничения политики безопасности.

person Dilum Ranatunga    schedule 11.02.2009

На самом деле переменная может быть установлена ​​или нет, поэтому в Java 8 или выше ее значение, допускающее значение NULL, должно быть заключено в объект Optional, что обеспечивает действительно хорошие функции. В следующем примере мы попытаемся получить переменную ENV_VAR1, если она не существует, мы можем выдать какое-то специальное исключение, чтобы предупредить об этом:

String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
  () -> new CustomException("ENV_VAR1 is not set in the environment"));
person EliuX    schedule 17.06.2016

Google предлагает проверить getenv ():

Возвращает неизменяемое представление строковой карты текущей системной среды.

Однако я не уверен, чем системные переменные отличаются от переменных среды, поэтому, если вы могли бы уточнить, я мог бы помочь больше.

person Chris Bunch    schedule 10.02.2009
comment
Я думаю, что раджа означает общесистемные, а не индивидуальные переменные среды. - person Rob; 10.02.2009

Как упоминалось выше, перезапуск eclipse работал у меня для пользовательской переменной среды. После перезапуска eclipse IDE System.getenv() забирает мою переменную среды.

person voidMainReturn    schedule 21.11.2016

Вы пробовали перезагрузку, так как вы установили переменную окружения?

Похоже, что Windows хранит переменную среды в каком-то кеше, и перезагрузка - один из способов ее обновления. Я не уверен, но может быть другой метод, но если вы не собираетесь слишком часто менять значение переменной, этого может быть достаточно.

person trilobite    schedule 10.02.2009

Вы используете систему Linux? В таком случае убедитесь, что вы экспортируете свою переменную.

myVar=testvalue; export myVar

Я получаю null, если не использую экспорт для глобального определения значения.

person keving    schedule 19.02.2019