¿Cómo puedo obtener el valor de la variable del sistema en Java?

169

¿Cómo puedo obtener el valor de la variable del sistema que está presente en

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

en Java

Editar

He usado el System.getenv()método

Está imprimiendo valor si doy

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

y muestra nullvalor si intento lo mismo para la variable de sistema creada por mí

System.out.println(System.getenv("DBE"));
raja
fuente
55
Puede intentar reiniciar el proceso de solicitud (NetBeans en mi caso).
Kotodid
3
He observado que la opción de reinicio de eclipse no funciona. Simplemente cierre la aplicación y vuelva a iniciarla.
Yasin
1
Reiniciar IntelliJ resolvió mi problema.
Bhushan Karmarkar
Reiniciar el sistema funcionó para mí, puede ser que JVM mantenga el caché de valores en el primer inicio debido a que no se detectan nuevas variables.
sumitkanoje

Respuestas:

52

Para aclarar, las variables del sistema son las mismas que las variables de entorno. Las variables de entorno del usuario se establecen por usuario y son diferentes cada vez que un usuario diferente inicia sesión. Las variables de entorno de todo el sistema son las mismas sin importar en qué usuario inicie sesión.

Para acceder al valor actual de una variable de todo el sistema o una variable de usuario en Java, consulte a continuación:

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

Para obtener más información sobre las variables de entorno, consulte esta página de wikipedia .

También asegúrese de que la variable de entorno que está intentando leer esté configurada correctamente antes de invocar Java haciendo un:

echo %MYENVVAR%

Debería ver el valor de la variable de entorno. De lo contrario, es posible que deba volver a abrir el shell (DOS) o cerrar sesión y volver a iniciarla.

Elijah
fuente
Hola ... He utilizado el método System.getenv (). Su valor de impresión si doy "System.out.println (System.getenv (" JAVA_HOME "));" y muestra un valor nulo si doy una variable de sistema creada por mí ("System.out.println (System.getenv (" DBE "));"
raja
3
getenvdebería ser en minúsculas en lugar de getEnvcorrecto?
Pratik Khadloya
1
Si lo hago echo %var%se imprime %var%. Si lo intento echo $var, funciona y muestra el valor de esa variable env. Mi getenvregresa nulo.
dialex
3
@dialex %var%utilizado para Windows, $varpara sistemas unix / linux / MacOS.
Al-Mothafar
27

Hay algunos detalles de interés al obtener propiedades del sistema / entorno.

Primero, System.getenv(String)se introdujo hace mucho tiempo, luego se desaprobó. La desaprobación (tontamente, IHMO) continuó hasta JSE 1.4 .

Se reintrodujo en JSE 5 .

Estos se configuran utilizando el panel de Variables de entorno en Windows. Es posible que los cambios en las variables no se recojan hasta que su VM actual se apague y se cierre la instancia CMD.exe.

A diferencia de las propiedades del entorno, Java también tiene propiedades del sistema Java, accesibles a través de System.getProperties(). Estas variables se pueden inicializar cuando la VM se inicia utilizando una serie de argumentos de línea de comando. Por ejemplo, los valores para las propiedades y se establecen en el siguiente comando:-Dname=valuemaxInMemorypagingDirectory

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

Estas propiedades se pueden modificar en tiempo de ejecución, salvo restricciones de política de seguridad.

Dilum Ranatunga
fuente
19

En realidad, la variable se puede establecer o no, por lo tanto, en Java 8 o superior, su valor anulable debe incluirse en un Optionalobjeto, lo que permite características realmente buenas. En el siguiente ejemplo trataremos de obtener la variable ENV_VAR1, si no existe, podemos lanzar alguna excepción personalizada para alertar sobre ella:

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

Google dice que eche un vistazo a getenv () :

Devuelve una vista de mapa de cadena no modificable del entorno actual del sistema.

Sin embargo, no estoy seguro de cómo las variables del sistema difieren de las variables de entorno, por lo que si pudiera aclarar, podría ayudar más.

Chris Bunch
fuente
Creo que raja significa "todo el sistema" en lugar de variables de entorno "por usuario".
Rob
3

¿Has intentado reiniciar desde que configuraste la variable de entorno?

Parece que Windows mantiene su variable de entorno en algún tipo de caché, y reiniciar es un método para actualizarlo. No estoy seguro, pero puede haber un método diferente, pero si no va a cambiar el valor de su variable con demasiada frecuencia, esto puede ser lo suficientemente bueno.

trilobite
fuente
3

Como se mencionó anteriormente en sombody, reiniciar eclipse funcionó para mí para la variable de entorno definida por el usuario. Después de reiniciar eclipse IDE, System.getenv()está recogiendo mi variable de entorno.

voidMainReturn
fuente
0

¿Estás en un sistema Linux? Si es así, asegúrese de exportar su variable.

myVar=testvalue; export myVar

Me pongo nulo a menos que use exportar para definir el valor globalmente.

keving
fuente