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

170

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

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

в Java?

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

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

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

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

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

System.out.println(System.getenv("DBE"));
раджа
источник
5
Вы можете попробовать перезапустить процесс запроса (в моем случае NetBeans).
Котодид
3
Я заметил, что опция перезапуска из Eclipse не работает. Просто закройте приложение и запустите его снова.
Ясин
1
Перезапуск IntelliJ решил мою проблему.
Бхушан Кармаркар
Перезапуск системы работал у меня, может быть JVM сохраняет кеш значений при первом запуске, из-за чего новые переменные не обнаруживаются.
sumitkanoje

Ответы:

52

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

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

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

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

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

echo %MYENVVAR%

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

Илия
источник
Привет .. Я использовал метод System.getenv (). Значение его печати, если я дам "System.out.println (System.getenv (" JAVA_HOME "));" и показывает нулевое значение, если я даю созданную мной системную переменную ("System.out.println (System.getenv (" DBE "));"
raja
3
getenvдолжно быть в маленьком случае вместо getEnvправа?
Пратик Хадлоя
1
Если я это делаю, echo %var%то печатает %var%. Если я попытаюсь вместо этого, echo $varон работает и отображает значение этой переменной env. Мой getenvвозвращается ноль.
диалект
3
@dialex %var%используется для Windows, $varдля систем Unix / Linux / MacOS.
Аль-Мотафар
27

Есть несколько деталей, представляющих интерес при получении свойств системы / среды.

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

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

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

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

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

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

Дилум Ранатунга
источник
19

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

String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
  () -> new CustomException("ENV_VAR1 is not set in the environment"));
EliuX
источник
5

Google говорит, чтобы проверить getenv () :

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

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

Крис Банч
источник
Я думаю, что raja означает «общесистемный», а не «переменные» для каждого пользователя.
Роб
3

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

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

трилобит
источник
3

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

voidMainReturn
источник
0

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

myVar=testvalue; export myVar

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

keving
источник