Come posso ottenere il valore della variabile di sistema in Java?


169

Come posso ottenere il valore della variabile di sistema che è presente in

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

in Java?

modificare

Ho usato il System.getenv()metodo.

È valore di stampa se do

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

e sta mostrando nullvalore se provo lo stesso per la variabile di sistema creata da me

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

5
Puoi provare a riavviare il processo di richiesta (NetBeans nel mio caso).
Kotodid,

3
Ho osservato che l'opzione di riavvio da eclipse non funziona. Chiudi l'applicazione e riavviala.
Yasin,

1
Il riavvio di IntelliJ ha risolto il mio problema.
Bhushan Karmarkar,

Riavviando il sistema ha funzionato per me, potrebbe essere JVM mantiene la cache di valori al primo avvio a causa della quale non vengono rilevate nuove variabili.
sumitkanoje,

Risposte:



52

Per chiarire, le variabili di sistema sono le stesse delle variabili di ambiente. Le variabili di ambiente dell'utente sono impostate per utente e sono diverse ogni volta che un utente diverso accede. Le variabili di ambiente a livello di sistema sono le stesse indipendentemente da ciò che l'utente accede.

Per accedere al valore corrente di una variabile di sistema o di una variabile utente in Java, vedere di seguito:

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

Per ulteriori informazioni sulle variabili di ambiente, consultare questa pagina di Wikipedia .

Assicurarsi inoltre che la variabile di ambiente che si sta tentando di leggere sia impostata correttamente prima di richiamare Java eseguendo:

echo %MYENVVAR%

Dovresti vedere il valore della variabile d'ambiente. In caso contrario, potrebbe essere necessario riaprire la shell (DOS) o disconnettersi e riconnettersi.


Ciao .. Ho usato il metodo System.getenv () .. Valore relativo alla stampa se do "System.out.println (System.getenv (" JAVA_HOME "));" e mostra il suo valore null se do la variabile di sistema creata da me ("System.out.println (System.getenv (" DBE "));"
raja,

3
getenvdovrebbe essere in minuscolo invece che getEnvgiusto?
Pratik Khadloya,

1
Se lo faccio echo %var%stampa %var%. Se provo invece echo $varfunziona e visualizza il valore di quella variabile env. Il mio getenvsta tornando null.
dialex,

3
@dialex %var%usato per Windows, $varper sistemi unix / linux / MacOS.
Al-Mothafar,

27

Ci sono alcuni dettagli di interesse quando si ottengono proprietà di sistema / ambiente.

In primo luogo, è System.getenv(String)stato introdotto nel passato, poi deprecato. La deprecazione (stupidamente, IHMO) è proseguita fino a JSE 1.4 .

È stato reintrodotto in JSE 5 .

Questi vengono impostati utilizzando il pannello Variabili d'ambiente in Windows. Le modifiche alle variabili potrebbero non essere rilevate fino allo spegnimento della VM corrente e all'uscita dall'istanza CMD.exe.

Contrariamente alle proprietà dell'ambiente, Java ha anche proprietà di sistema Java, accessibili tramite System.getProperties(). Queste variabili possono essere inizializzate quando la VM viene avviata utilizzando una serie di argomenti della riga di comando. Ad esempio, i valori per le proprietà e sono impostati nel comando seguente:-Dname=valuemaxInMemorypagingDirectory

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

Queste proprietà possono essere modificate in fase di esecuzione, salvo le restrizioni dei criteri di sicurezza.


19

In realtà la variabile può essere impostata o meno, quindi, in Java 8 o superiore, il suo valore nullable dovrebbe essere racchiuso in un Optionaloggetto, il che consente funzionalità davvero buone. Nel seguente esempio cercheremo di ottenere la variabile ENV_VAR1, se non esiste potremmo lanciare qualche eccezione personalizzata per avvisarla:

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

5

Google dice di dare un'occhiata a getenv () :

Restituisce una vista della mappa di stringhe non modificabile dell'ambiente di sistema corrente.

Non sono sicuro di come le variabili di sistema differiscano dalle variabili di ambiente, quindi, se potessi chiarire, potrei aiutare di più.


Penso che raja significhi "a livello di sistema" invece di variabili di ambiente "per utente".
Rob,

3

Hai provato a riavviare da quando hai impostato la variabile d'ambiente?

Sembra che Windows mantenga la sua variabile d'ambiente in una sorta di cache e il riavvio è un metodo per aggiornarlo. Non sono sicuro, ma potrebbe esserci un metodo diverso, ma se non cambierai troppo spesso il tuo valore variabile, questo potrebbe essere abbastanza buono.


3

Come accennato in precedenza da sombody, il riavvio di eclipse ha funzionato per me per la variabile d'ambiente definita dall'utente. Dopo aver riavviato l'IDE di Eclipse, System.getenv()sta rilevando la mia variabile di ambiente.


0

Sei su un sistema Linux? In tal caso, assicurati di esportare la tua variabile.

myVar=testvalue; export myVar

Ottengo null a meno che non utilizzi export per definire il valore a livello globale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.