Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Module : java.base - Package : java.lang - Classe : System
Version documentée : Java SE 17

Méthode « System.getenv »

Signature

public static String getenv( String name );

Description

Cette méthode permet de récupérer le contenu d'une variable d'environnement grâce à son nom. Une variable d'environnement est définie au niveau du système d'exploitation sous-jacent. Elle correspond à une configuration particulière utilisable par un ou plusieurs processus. Une variable d'environnement possède un nom et une valeur.

on peut notamment parler de la variable d'environnement CLASSPATH qui indique à l'environnement d'exécution Java ou se trouvent les dossiers complémentaires pouvant contenir du code Java.
les noms ainsi que la gestion des variables d'environnement sont spécifiques au système d'exploitation utilisé. Une utilisation inadaptée de ces variables d'environnements par votre programme Java peut compromettre sa portabilité : il ne marcherait alors plus que sur le système d'exploitation ou il aurait été développé. Pour rappel, le maître mot de Java est WORA (Write Once, Run Anywhere).
selon le système d'exploitation considéré, le nom d'une variable d'environnement est « case-sensitive » (Linux/Unix/Mac) ou non (Windows). Ainsi, sur un environnement Windows, le code suivant renvoit systématiquement true.
 1 
 2 
 3 
String upperName = System.getenv("PATH");
String lowerName = System.getenv("path");
System.out.println( upperName.equals( lowerName ) );
Les variables d'environnement sont case-insensitives, sur un système d'exploitation Windows.

Les concepts de variables d'environnement et de propriétés d'environnement sont en fait très proches. Une propriété d'environnement, un concept purement Java, correspond aussi à une configuration, mais le nom d'une telle propriété est spécifié par Java et est case-sensitive. Ainsi, on retrouvera les mêmes propriétés quel que soit le système d'exploitation considéré, contrairement aux variables d'environnement. De plus, la valeur d'une propriété d'environnement, bien qu'issue la plupart du temps d'une variable d'environnement, est souvent, elle aussi, indépendante du système considéré.

Tant que possible, il est donc vivement conseillé d'utiliser les propriétés d'environnement au profit des variables d'environnement.

si un « Security Manager » est spécifié, l'accès aux variables d'environnement peut être restreint. Dans ce cas, une exception de type RuntimePermission pourra être déclenchée.

Paramètre

ParamètreTypeDescription
name
String
le nom de la variable d'environnement à retrouver.

Valeur de retour

La valeur de retour est de type String. null

Exceptions

Type de l'exceptionDescription
NullPointerException
Une exception de ce type sera déclenchée si le paramètre name vaut null.
RuntimePermission
Une exception de ce type pourra être déclenchée si un SecurityManager vous restreint les accès aux variables d'environnement.

Exemple de code

L'exemple suivant cherche à afficher le répertoire d'accueil de l'utilisateur exécutant le programme. Deux techniques y sont comparées : l'utilisation des variables d'environnement et celle d'une propriété d'environnement. J'espère que la démonstration vous permettra de valider qu'il est préférable, tant que possible, de privilégier l'utilisation des propriétés d'environnement.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
package fr.koor.samples;
        
public class Sample {

    public static void main( String [] args ) {
        
        // Récupération du répertoire d'accueil de l'utilisateur via les variables d'environnement
        String homeDirectory = null;
        String osName = System.getenv( "OS" );
                
        if ( osName != null && osName.equals("Windows_NT") ) {
            homeDirectory = System.getenv( "HOMEDRIVE" ) + System.getenv( "HOMEPATH" );
        } else {
            homeDirectory = System.getenv( "HOME" );        // Imposé par POSIX
        }

        System.out.println( "With getenv: " + homeDirectory );


        // Récupération du répertoire d'accueil de l'utilisateur via une propriété d'environnement
        homeDirectory = System.getProperty("user.home");
        System.out.println( "With getProperty: " + homeDirectory );

    }

}
Exemple d'utilisation de la méthode getenv.
POSIX est une famille de normes techniques sur une interface d'utilisation et de programmation d'un système d'exploitation. Le terme POSIX signifiant « Portable Operating System Interface X » (le X faisant référence à Unix). Les divers systèmes Unix, mais aussi les Linux et Mac, supportent les normes POSIX.

Disponible depuis

1.0

Voir aussi

La méthode System.getenv()
La méthode System.getProperties()
La méthode System.getProperty(String name)
La méthode ProcessBuilder.environnement()