Jak mogę uzyskać wartość zmiennej systemowej, która jest obecna w
MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables
w Javie?
Edytować
Użyłem System.getenv()
metody.
To jest wartość drukarska, jeśli podam
System.out.println(System.getenv("JAVA_HOME"));
i pokazuje null
wartość, jeśli spróbuję tego samego dla utworzonej przeze mnie zmiennej systemowej
System.out.println(System.getenv("DBE"));
java
environment-variables
radża
źródło
źródło
Odpowiedzi:
Użyj
System.getenv(String)
metody, przekazując nazwę zmiennej do odczytania.źródło
Aby wyjaśnić, zmienne systemowe są takie same jak zmienne środowiskowe. Zmienne środowiskowe użytkownika są ustawiane dla każdego użytkownika i są różne, gdy loguje się inny użytkownik. Zmienne środowiskowe dotyczące całego systemu są takie same bez względu na to, który użytkownik się loguje.
Aby uzyskać dostęp do bieżącej wartości zmiennej systemowej lub zmiennej użytkownika w Javie, zobacz poniżej:
Więcej informacji na temat zmiennych środowiskowych można znaleźć na tej stronie Wikipedii .
Upewnij się również, że zmienna środowiskowa, którą próbujesz odczytać, jest poprawnie ustawiona przed wywołaniem języka Java, wykonując:
Powinieneś zobaczyć wartość zmiennej środowiskowej. Jeśli nie, może być konieczne ponowne otwarcie powłoki (DOS) lub wylogowanie się i ponowne zalogowanie.
źródło
getenv
powinno być w małym przypadku zamiast wgetEnv
prawo?echo %var%
, drukuje%var%
. Jeśli spróbuję zamiastecho $var
tego, działa i wyświetla wartość tej zmiennej env. Mójgetenv
zwraca zero.%var%
używany dla Windows,$var
dla systemów unix / linux / MacOS.Podczas pobierania właściwości systemu / środowiska jest kilka interesujących szczegółów.
Najpierw
System.getenv(String)
został wprowadzony dawno temu, a następnie został wycofany. Wycofywanie (głupio, IHMO) trwało przez całą drogę do JSE 1.4 .Został ponownie wprowadzony w JSE 5 .
Są one ustawiane za pomocą panelu Zmienne środowiskowe w systemie Windows. Zmiany w zmiennych mogą nie zostać pobrane, dopóki bieżąca maszyna wirtualna nie zostanie zamknięta, a wystąpienie CMD.exe zostanie zamknięte.
W przeciwieństwie do właściwości środowiska Java ma również właściwości systemowe Java, dostępne za pośrednictwem
System.getProperties()
. Te zmienne można zainicjować, gdy maszyna wirtualna jest uruchamiana przy użyciu argumentów wiersza polecenia serii . Na przykład wartości właściwości i są ustawiane w poniższym poleceniu:-Dname=value
maxInMemory
pagingDirectory
Te właściwości można modyfikować w czasie wykonywania, wykluczając ograniczenia zasad bezpieczeństwa.
źródło
W rzeczywistości zmienna może być ustawiona lub nie, więc w Javie 8 lub wyższej jej wartość null powinna być opakowana w
Optional
obiekt, co zapewnia naprawdę dobre funkcje. W poniższym przykładzie postaramy się uzyskać zmiennąENV_VAR1
, jeśli nie istnieje, możemy rzucić niestandardowy wyjątek, aby ostrzec o tym:źródło
Google mówi, aby sprawdzić getenv () :
Nie jestem jednak pewien, czym różnią się zmienne systemowe od zmiennych środowiskowych, więc jeśli mógłbyś wyjaśnić, mógłbym pomóc więcej.
źródło
Czy próbowałeś ponownie uruchomić komputer od czasu ustawienia zmiennej środowiskowej?
Wygląda na to, że system Windows przechowuje swoją zmienną środowiskową w jakiejś pamięci podręcznej, a ponowne uruchomienie jest jedną z metod jej odświeżenia. Nie jestem pewien, ale może być inna metoda, ale jeśli nie zamierzasz zbyt często zmieniać wartości zmiennej, może to być wystarczająco dobre.
źródło
Jak wspomniałem powyżej, ponowne uruchomienie eclipse działało dla mnie dla zmiennej środowiskowej zdefiniowanej przez użytkownika. Po ponownym uruchomieniu eclipse IDE
System.getenv()
pobiera moją zmienną środowiskową.źródło
Czy korzystasz z systemu Linux? Jeśli tak, upewnij się, że eksportujesz zmienną.
Otrzymuję wartość null, chyba że używam eksportu do globalnego zdefiniowania wartości.
źródło