2011-09-15 42 views
9

System.getenv(name) necesita el nombre de la variable de entorno.Cómo enumerar todas las variables de entorno en Java

Estoy tratando de llamar al Runtime.exec(String[], String[], File), el parámetro secundario necesita una matriz de variable de entorno, no estoy seguro de si el subproceso heredará las variables de entorno del proceso actual si especifico este parámetro.

Por ejemplo, si paso new String[]{"NEWDIR=/home"} como parámetro secundario y el proceso de java corriente tiene ambiente OLDDIR=/var, lo que es el valor de retorno de System.getenv("OLDDIR") en el subproceso?

actualización: sentimos, tengo que usar Java 1.4 y parece que System.getenv() se introdujo en 1.5?

+0

¿Por qué debe usar Java 1.4? Las versiones más nuevas de Java tienen fantástica compatibilidad con versiones anteriores: ¿ha intentado actualizar? – Bringer128

Respuesta

11

System.getenv() devolverá un Map<String,String> con todas las variables de entorno.

Pero igual podría cambiar a ProcessBuilder que es una API más conveniente para iniciar nuevos procesos.

Con ProcessBuilder sólo tiene que llamar environment() y obtener un Map que contiene variables de entorno existentes y que puede manipular cómo desea: es decir, si se añade algo a ella, a continuación, que será añadido a la nueva procesa variables de entorno Si elimina algo de él, estará no presente en el nuevo proceso.

+0

Gracias por su rápida respuesta, ¿cómo debo hacer en JAVA14? – sevenever

+0

Está bastante jodido entonces, ya que tanto 'System.getenv()' como 'ProcessBuilder' se introdujeron en Java 5 solamente y' Runtime.exec() 'no permite una manera de fusionar variables de entorno existentes desconocidas con los especificados En serio: deshazte de esa versión antigua. –

17
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
1

Si ejecuta un shell externo, puede usarlo para establecer variables de entorno. p.ej.

bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2 

Esto sólo funciona si tiene un shell de UNIX (o cygwin)

debe migrar fuera de Java 1.4 y Java 5.0. Incluso Java 6 podría considerar la actualización a Java 7.

Cuestiones relacionadas