Como posso obter o valor da variável System em Java?

169

Como posso obter o valor da variável do sistema presente em

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

em Java?

Editar

Eu usei System.getenv()método.

É valor de impressão se eu der

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

e está mostrando nullvalor se eu tentar o mesmo para a variável de sistema criada por mim

System.out.println(System.getenv("DBE"));
rajá
fonte
5
Você pode tentar reiniciar o processo de solicitação (NetBeans no meu caso).
Kotodid
3
Eu observei que a opção de reinicialização do eclipse não funciona. Apenas feche o aplicativo e inicie-o novamente.
Yasin
1
A reinicialização do IntelliJ resolveu meu problema.
Bhushan Karmarkar
Reiniciando o sistema funcionou para mim, pode ser que a JVM mantenha o cache de valores no primeiro início, devido ao qual novas variáveis ​​não são detectadas.
sumitkanoje

Respostas:

52

Para esclarecer, as variáveis ​​do sistema são iguais às variáveis ​​de ambiente. As variáveis ​​de ambiente do usuário são definidas por usuário e são diferentes sempre que um usuário diferente efetua login. As variáveis ​​de ambiente em todo o sistema são as mesmas, independentemente do usuário que efetua logon.

Para acessar o valor atual de uma variável de todo o sistema ou de uma variável de usuário em Java, consulte abaixo:

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

Para mais informações sobre variáveis ​​de ambiente, consulte esta página da Wikipedia .

Verifique também se a variável de ambiente que você está tentando ler está configurada corretamente antes de chamar o Java, fazendo um:

echo %MYENVVAR%

Você deve ver o valor da variável de ambiente. Caso contrário, talvez seja necessário reabrir o shell (DOS) ou fazer logoff e logon novamente.

Elijah
fonte
Oi .. Eu usei o método System.getenv () .. Seu valor de impressão se eu der "System.out.println (System.getenv (" JAVA_HOME ")));" e sua mostrando valor nulo se eu dou variável do sistema criado por mim ( "System.out.println (System.getenv (" DBE "));"
raja
3
getenvdeve ser em caso pequeno, em vez de getEnvcerto?
Pratik Khadloya
1
Se eu fizer echo %var%, imprime %var%. Se eu tentar, echo $varele funciona e exibe o valor dessa variável env. Meu getenvestá retornando nulo.
Dia28
3
@dialex %var%usado para windows, $varpara sistemas unix / linux / MacOS.
Al-Mothafar
27

Existem alguns detalhes de interesse ao obter propriedades do sistema / ambiente.

Primeiro, System.getenv(String)foi introduzido antes e depois preterido. A depreciação (tolamente, IHMO) continuou até o JSE 1.4 .

Foi reintroduzido no JSE 5 .

Essas são definidas usando o painel Variáveis ​​de ambiente no Windows. As alterações nas variáveis ​​podem não ser selecionadas até que sua VM atual seja desligada e a instância do CMD.exe seja encerrada.

Ao contrário das propriedades do ambiente, o Java também possui propriedades do sistema Java, acessíveis através System.getProperties(). Essas variáveis ​​podem ser inicializadas quando a VM é iniciada usando argumentos de linha de comando em série . Por exemplo, os valores para as propriedades e são configurados no comando abaixo:-Dname=valuemaxInMemorypagingDirectory

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

Essas propriedades podem ser modificadas em tempo de execução, impedindo restrições de diretiva de segurança.

Dilum Ranatunga
fonte
19

Na verdade, a variável pode ser configurada ou não; portanto, no Java 8 ou superior, seu valor anulável deve ser agrupado em um Optionalobjeto, o que permite recursos realmente bons. No exemplo a seguir, tentaremos obter a variável ENV_VAR1, se ela não existir, podemos lançar alguma exceção personalizada para alertar sobre ela:

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

O Google diz para conferir getenv () :

Retorna uma visualização de mapa de cadeia não modificável do ambiente atual do sistema.

No entanto, não tenho certeza de como as variáveis ​​do sistema diferem das variáveis ​​de ambiente; portanto, se você puder esclarecer, eu poderia ajudar mais.

Chris Bunch
fonte
Eu acho que raja significa "todo o sistema" em oposição a variáveis ​​de ambiente "por usuário".
Rob
3

Você tentou reiniciar desde que definiu a variável de ambiente?

Parece que o Windows mantém sua variável de ambiente em algum tipo de cache e a reinicialização é um método para atualizá-lo. Não tenho certeza, mas pode haver um método diferente, mas se você não alterar muito o valor da variável, isso pode ser bom o suficiente.

trilobita
fonte
3

Como mencionado por alguém acima, reiniciar o eclipse funcionou para mim para a variável de ambiente definida pelo usuário. Depois de reiniciar o eclipse IDE, System.getenv()está pegando minha variável de ambiente.

voidMainReturn
fonte
0

Você está em um sistema Linux? Nesse caso, verifique se você está exportando sua variável.

myVar=testvalue; export myVar

Eu fico nulo, a menos que use exportação para definir o valor globalmente.

keving
fonte