Как я могу получить значение системной переменной в Java? - PullRequest
136 голосов
/ 10 февраля 2009

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

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

на Java?

Редактировать

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

Это значение печати, если я дам

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

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

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

Ответы [ 8 ]

152 голосов
/ 10 февраля 2009

Используйте метод System.getenv(String), передавая имя переменной для чтения.

50 голосов
/ 10 февраля 2009

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

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

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

Для получения дополнительной информации о переменных среды см. Эту страницу википедии .

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

echo %MYENVVAR%

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

23 голосов
/ 11 февраля 2009

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

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

Это было повторно введено в JSE 5 .

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

В отличие от свойств среды, Java также имеет системные свойства Java, доступные через System.getProperties(). Эти переменные могут быть инициализированы при запуске виртуальной машины с использованием аргументов командной строки серии -D<i>name</i>=<i>value</i>. Например, значения для свойств maxInMemory и pagingDirectory задаются в следующей команде:

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

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

12 голосов
/ 17 июня 2016

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

String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
  () -> new CustomCheckedException("ENV_VAR1 is not set in the environment"));
5 голосов
/ 10 февраля 2009

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

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

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

3 голосов
/ 21 ноября 2016

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

1 голос
/ 10 февраля 2009

Вы пробовали перезагрузить компьютер после установки переменной среды?

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

0 голосов
/ 19 февраля 2019

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

myVar=testvalue; export myVar

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...