Wie kann ich den Systemvariablenwert in Java abrufen?

169

Wie kann ich den Systemvariablenwert erhalten, der in vorhanden ist?

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

in Java?

Bearbeiten

Ich habe System.getenv()Methode verwendet.

Es ist Druckwert, wenn ich gebe

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

und es zeigt nullWert, wenn ich das gleiche für die von mir erstellte Systemvariable versuche

System.out.println(System.getenv("DBE"));
Raja
quelle
5
Sie können versuchen, den Anforderungsprozess neu zu starten (in meinem Fall NetBeans).
Kotodid
3
Ich habe festgestellt, dass die Neustartoption von Eclipse nicht funktioniert. Schließen Sie einfach die Anwendung und starten Sie sie erneut.
Yasin
1
Ein Neustart von IntelliJ hat mein Problem gelöst.
Bhushan Karmarkar
Ein Neustart des für mich funktionierenden Systems kann dazu führen, dass JVM beim ersten Start den Wertecache beibehält, aufgrund dessen keine neuen Variablen erkannt werden.
Sumitkanoje

Antworten:

52

Zur Verdeutlichung sind Systemvariablen dieselben wie Umgebungsvariablen. Benutzerumgebungsvariablen werden pro Benutzer festgelegt und unterscheiden sich, wenn sich ein anderer Benutzer anmeldet. Systemweite Umgebungsvariablen sind unabhängig vom Benutzer gleich.

Informationen zum Zugriff auf den aktuellen Wert einer systemweiten Variablen oder einer Benutzervariablen in Java finden Sie unten:

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

Weitere Informationen zu Umgebungsvariablen finden Sie auf dieser Wikipedia-Seite .

Stellen Sie außerdem sicher, dass die Umgebungsvariable, die Sie lesen möchten, richtig eingestellt ist, bevor Sie Java aufrufen, indem Sie Folgendes ausführen:

echo %MYENVVAR%

Sie sollten den Wert der Umgebungsvariablen sehen. Wenn nicht, müssen Sie möglicherweise die Shell (DOS) erneut öffnen oder sich abmelden und wieder anmelden.

Elijah
quelle
Hallo .. Ich habe die System.getenv () -Methode verwendet. Der Druckwert, wenn ich "System.out.println (System.getenv (" JAVA_HOME "))) gebe." und es zeigt Nullwert an, wenn ich eine von mir erstellte Systemvariable gebe ("System.out.println (System.getenv (" DBE "));"
Raja
3
getenvsollte in kleinem Fall statt getEnvrichtig sein?
Pratik Khadloya
1
Wenn ich es mache echo %var%, druckt %var%. Wenn ich es stattdessen versuche echo $var, funktioniert es und zeigt den Wert dieser env-Variablen an. Mein getenvgibt null zurück.
Dialex
3
@dialex %var%wird für Windows, $varfür Unix- / Linux- / MacOS-Systeme verwendet.
Al-Mothafar
27

Beim Abrufen von System- / Umgebungseigenschaften sind einige Details von Interesse.

Zuerst System.getenv(String)wurde vor langer Zeit eingeführt, dann veraltet. Die Abwertung (dummerweise IHMO) setzte sich bis in JSE 1.4 fort .

Es wurde in JSE 5 wieder eingeführt .

Diese werden im Fenster "Umgebungsvariablen" in Windows festgelegt. Änderungen an den Variablen werden möglicherweise erst übernommen, wenn Ihre aktuelle VM heruntergefahren und die Instanz CMD.exe beendet wird.

Im Gegensatz zu den Umgebungseigenschaften verfügt Java auch über Java-Systemeigenschaften, auf die über zugegriffen werden kann System.getProperties(). Diese Variablen können beim Starten der VM mithilfe einer Reihe von Befehlszeilenargumenten initialisiert werden . Zum Beispiel die Werte für die Eigenschaften und werden im folgenden Befehl festgelegt:-Dname=valuemaxInMemorypagingDirectory

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

Diese Eigenschaften können zur Laufzeit geändert werden, sofern keine Sicherheitsrichtlinien gelten.

Dilum Ranatunga
quelle
19

Tatsächlich kann die Variable festgelegt werden oder nicht. In Java 8 oder höher sollte ihr nullbarer Wert in ein OptionalObjekt eingeschlossen werden, das wirklich gute Funktionen ermöglicht. Im folgenden Beispiel werden wir versuchen, die Variable zu erhalten ENV_VAR1. Wenn sie nicht existiert, können wir eine benutzerdefinierte Ausnahme auslösen, um darauf aufmerksam zu machen:

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

Google sagt, getenv () auszuchecken :

Gibt eine nicht änderbare String-Map-Ansicht der aktuellen Systemumgebung zurück.

Ich bin mir jedoch nicht sicher, wie sich Systemvariablen von Umgebungsvariablen unterscheiden. Wenn Sie also klarstellen könnten, könnte ich Ihnen weiterhelfen.

Chris Bunch
quelle
Ich denke, Raja bedeutet "systemweit" im Gegensatz zu "Umgebungsvariablen pro Benutzer".
Rob
3

Haben Sie versucht, einen Neustart durchzuführen, seit Sie die Umgebungsvariable festgelegt haben?

Es scheint, dass Windows seine Umgebungsvariable in einer Art Cache hält, und ein Neustart ist eine Methode, um sie zu aktualisieren. Ich bin nicht sicher, aber es gibt möglicherweise eine andere Methode, aber wenn Sie Ihren Variablenwert nicht zu oft ändern, ist dies möglicherweise gut genug.

Trilobit
quelle
3

Wie oben erwähnt, hat der Neustart von Eclipse für mich für die benutzerdefinierte Umgebungsvariable funktioniert. Nachdem ich die Eclipse-IDE neu gestartet habe, System.getenv()wird meine Umgebungsvariable abgerufen.

voidMainReturn
quelle
0

Sind Sie auf einem Linux-System? Wenn ja, stellen Sie sicher, dass Sie Ihre Variable exportieren.

myVar=testvalue; export myVar

Ich erhalte null, es sei denn, ich verwende den Export, um den Wert global zu definieren.

keving
quelle