2011-09-15 16 views
9

System.getenv(name) ha bisogno il nome della variabile d'ambiente.Come enumerare tutti variabile d'ambiente in Java

Sto cercando di chiamare Runtime.exec(String[], String[], File), il parametro secondario ha bisogno di una matrice di variabile di ambiente, non sono sicuro se il sottoprocesso erediterà le variabili di ambiente dal processo corrente se ho specificato questo parametro.

Ad esempio, se passo new String[]{"NEWDIR=/home"} come parametro secondario e il processo java corrente ha l'ambiente OLDDIR=/var, qual è il valore di ritorno di System.getenv("OLDDIR") nel sottoprocesso?

aggiornamento: Siamo spiacenti, devo usare Java 1.4 e sembra che System.getenv() è stato introdotto nella 1.5?

+0

Perché devi usare Java 1.4? Le versioni più recenti di Java hanno una fantastica compatibilità con le versioni precedenti: hai provato ad aggiornare? – Bringer128

risposta

11

System.getenv() restituirà un Map<String,String> con tutte le variabili d'ambiente.

Ma si potrebbe facilmente passare a ProcessBuilder che è un'API più conveniente per avviare nuovi processi.

Con ProcessBuilder si può semplicemente chiamare environment() e ottenere un Map che contiene le variabili d'ambiente esistenti e che si può manipolare come si vuole: per esempio, se si aggiunge qualcosa ad esso, poi che sarà aggiunto alla nuova elabora le variabili di ambiente. Se si rimuove qualcosa da esso, sarà non essere presente nel nuovo processo.

+0

Grazie per la tua rapida risposta, come devo fare in JAVA14? – sevenever

+0

sei praticamente avvitato poi, dal momento che entrambi 'System.getenv()' e 'ProcessBuilder' dove introdotto in Java 5 e solo' Runtime.exec() 'non permette un modo per unire sconosciuti variabili d'ambiente esistenti con nuovi quelli specificati. Seriamente: sbarazzarsi di quella versione antica. –

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

Se si esegue un guscio esterno, è possibile utilizzarlo per impostare le variabili d'ambiente. per esempio.

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

Questo funziona solo se si dispone di una shell UNIX (o Cygwin)

è necessario migrare lontano da Java 1.4 e Java 5.0. Anche Java 6 si potrebbe prendere in considerazione l'aggiornamento a Java 7.

Problemi correlati