Comment puis-je obtenir la valeur de la variable système en Java?

170

Comment puis-je obtenir la valeur de la variable système qui est présente dans

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

à Java?

Éditer

J'ai utilisé la System.getenv()méthode.

C'est la valeur d'impression si je donne

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

et il montre la nullvaleur si j'essaye la même chose pour la variable système créée par moi

System.out.println(System.getenv("DBE"));
raja
la source
5
Vous pouvez essayer de redémarrer le processus de demande (NetBeans dans mon cas).
Kotodid
3
J'ai observé que l'option de redémarrage d'Eclipse ne fonctionne pas. Fermez simplement l'application et redémarrez-la.
Yasin
1
Le redémarrage d'IntelliJ a résolu mon problème.
Bhushan Karmarkar
Le redémarrage du système a fonctionné pour moi, peut-être que JVM garde le cache des valeurs au premier démarrage en raison de laquelle de nouvelles variables ne sont pas détectées.
sumitkanoje

Réponses:

52

Pour clarifier, les variables système sont les mêmes que les variables d'environnement. Les variables d'environnement utilisateur sont définies par utilisateur et sont différentes chaque fois qu'un utilisateur différent se connecte. Les variables d'environnement à l'échelle du système sont les mêmes quel que soit l'utilisateur qui se connecte.

Pour accéder à la valeur actuelle d'une variable système ou à une variable utilisateur en Java, voir ci-dessous:

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

Pour plus d'informations sur les variables d'environnement, consultez cette page wikipedia .

Assurez-vous également que la variable d'environnement que vous essayez de lire est correctement définie avant d'appeler Java en effectuant une:

echo %MYENVVAR%

Vous devriez voir la valeur de la variable d'environnement. Sinon, vous devrez peut-être rouvrir le shell (DOS) ou vous déconnecter et vous reconnecter.

Élie
la source
Salut .. J'ai utilisé la méthode System.getenv () .. Sa valeur d'impression si je donne "System.out.println (System.getenv (" JAVA_HOME "));" et sa valeur nulle si je donne la variable système créée par moi ("System.out.println (System.getenv (" DBE "));"
raja
3
getenvdevrait être en petit cas au lieu de getEnvdroit?
Pratik Khadloya
1
Si je fais echo %var%ça imprime %var%. Si j'essaie à la place, echo $varcela fonctionne et affiche la valeur de cette variable env. Mon getenvretourne null.
dialex
3
@dialex %var%utilisé pour Windows, $varpour les systèmes unix / linux / MacOS.
Al-Mothafar
27

Il y a quelques détails intéressants lors de l'obtention des propriétés système / environnement.

Premièrement, a System.getenv(String)été introduit il y a longtemps, puis obsolète. La dépréciation (bêtement, IHMO) s'est poursuivie jusqu'à JSE 1.4 .

Il a été réintroduit dans JSE 5 .

Ceux-ci sont définis à l'aide du panneau Variables d'environnement de Windows. Les modifications apportées aux variables peuvent ne pas être prises en compte tant que votre machine virtuelle actuelle n'est pas arrêtée et que l'instance CMD.exe est fermée.

Contrairement aux propriétés de l'environnement, Java possède également des propriétés système Java, accessibles via System.getProperties(). Ces variables peuvent être initialisées au démarrage de la machine virtuelle à l'aide d'une série d' arguments de ligne de commande. Par exemple, les valeurs des propriétés et sont définies dans la commande ci-dessous:-Dname=valuemaxInMemorypagingDirectory

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

Ces propriétés peuvent être modifiées au moment de l'exécution, à l'exception des restrictions de politique de sécurité.

Dilum Ranatunga
la source
19

En fait, la variable peut être définie ou non, donc, dans Java 8 ou supérieur, sa valeur Nullable doit être enveloppée dans un Optionalobjet, ce qui permet de très bonnes fonctionnalités. Dans l'exemple suivant, nous allons essayer d'obtenir la variable ENV_VAR1, si elle n'existe pas, nous pouvons lancer une exception personnalisée pour en avertir:

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

Google dit de vérifier getenv () :

Renvoie une vue de carte de chaîne non modifiable de l'environnement système actuel.

Je ne suis pas sûr en quoi les variables système diffèrent des variables d'environnement, donc si vous pouviez clarifier, je pourrais vous aider davantage.

Chris Bunch
la source
Je pense que raja signifie "à l'échelle du système" par opposition aux variables d'environnement "par utilisateur".
Rob
3

Avez-vous essayé de redémarrer depuis que vous avez défini la variable d'environnement?

Il semble que Windows conserve sa variable d'environnement dans une sorte de cache, et le redémarrage est une méthode pour l'actualiser. Je ne suis pas sûr, mais il peut y avoir une méthode différente, mais si vous ne changez pas trop souvent la valeur de votre variable, cela peut être suffisant.

trilobite
la source
3

Comme mentionné par sombody ci-dessus, redémarrer eclipse a fonctionné pour moi pour la variable d'environnement définie par l'utilisateur. Après avoir redémarré l'EDI eclipse, System.getenv()je récupère ma variable d'environnement.

voidMainReturn
la source
0

Êtes-vous sur un système Linux? Si c'est le cas, assurez-vous d'exporter votre variable.

myVar=testvalue; export myVar

J'obtiens null sauf si j'utilise l'exportation pour définir la valeur globalement.

keving
la source