Як я можу отримати значення змінної системи на Java?


169

Як я можу отримати значення змінної системи, яке присутнє в

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 вирішив мою проблему.
Bhushan

Перезапустивши працюючу для мене систему, можливо, 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повертається недійсним.
dialex

3
@dialex %var%використовується для Windows, $varдля систем Unix / linux / MacOS.
Аль-Мотафар

27

При отриманні властивостей системи / середовища є кілька цікавих деталей.

Спочатку System.getenv(String)було запроваджено зворотний шлях, коли, а потім застарілий. Позбавлення (нерозумно, IHMO) продовжувалося все до JSE 1.4 .

Він був знову введений в JSE 5 .

Вони встановлюються за допомогою панелі "Змінні середовища" в Windows. Зміни змінних можуть не отримати, поки не вимкнеться поточний VM і не вийде екземпляр CMD.exe.

На відміну від властивостей середовища, Java також має властивості системи Java, доступні через System.getProperties() . Ці змінні можна ініціалізувати, коли VM запускається з використанням аргументів командного рядка серії . Наприклад, значення для властивостей і задаються в команді нижче:-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"));

5

Google каже перевірити getenv () :

Повертає немодифікований вигляд рядка на карті поточного системного середовища.

Я не впевнений, чим системні змінні відрізняються від змінних оточення, тому, якщо ви можете уточнити, я можу допомогти більше.


Я думаю, що raja означає "загальносистемний" на відміну від змінних умов середовища "для кожного користувача".
Роб

3

Ви намагалися перезавантажити, встановивши змінну середовища?

Здається, що Windows зберігає змінну середовища в якомусь кеші, і перезавантаження - це один із способів оновлення. Я не впевнений, але може бути інший метод, але якщо ви не збираєтесь занадто часто змінювати змінне значення, це може бути досить хорошим.


3

Як згадував хтось вище, перезапуск затемнення працювало для мене для визначеної користувачем змінної середовища. Після того як я перезапускаю затемнення IDE, System.getenv()збирає мій змінний оточення.


0

Ви в системі Linux? Якщо так, переконайтесь, що ви експортуєте свою змінну.

myVar=testvalue; export myVar

Я отримую нуль, якщо не використовую експорт для визначення значення в усьому світі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.