Les variables d’environnement sont des chaînes des texte donnant des informations utiles à l’exécution d’un programme Java.
Il faut faire attention car certaines variables d’environnement ne sont pas portables: par exemple les systèmes Applet/Mac n’ont pas de varibales d’environnement, et les systèmes DOS (Windows) utilisent un système de variables d’environnement différent de celui utilisé sur les systèmes UNIX.
Nous allons distinguer dans cet article 3 types de variables différents: celles que l’on peut spécifier à l’exécution d’un programme Java, en ajoutant des options à la commende "java maClasse" (portables sur tous les systèmes d’exploitation); celles que l’on peut définir avant l’exécution d’un programme, une bonne fois pour toutes, comme le célébrissime CLASSPATH (ce sont ces variables d’enviromment qui posent problème selon l’OS sous lequel est exécuté notre application Java); et, pour finir, les variables système, définies par la spécification Java, non modifiables, qui renseignent sur la JVM utilisée, et qui sont indépendantes de l’OS sous lequel tourne notre programme.
1) Premier type
Lors du travail avec les Properties, java.util.Properties, on utilise un fichier de propriétés. On peut par exemple créer 3 fichiers de propriétés qui renfermeront les valeurs en chaînes dures des textes d’une interface graphique.
On aura donc par exemple:
# Premier fichier: pour une enterface en français
# Ce fichier s’appelle francais.properties
monBouton1 = "OK"
monBouton2 = "Annuler"
# Second fichier: pour la même application, avec l’interface traduite en anglais
# Ce fichier s’appelle anglais.properties
monBouton1 = "OK"
monBouton2 = "Cancel"
# Troisième fichier: pour la même application, avec l’interface traduite en martien (langue des petits hommes verts)
# Ce fichier s’appelle martien.properties
monBouton1 = "GlupGlup"
monBouton2 = "Gniorf"
On a ainsi 3 fichiers qui contiennent le label de tous les éléments de notre interface graphique. On va lancer notre programme en lui indiquant que l’on veut utiliser l’un ou l’autre des fichiers… selon si notre utilisateur est français, américian, ou martien !
java -Dlangue=martien.properties MaClasse
On utilise une variable que l’on appelle "langue" dans laquelle sera stockée le nom du fichier de propriétés à charger.
Il ne nous reste plus qu’à charger ce fichier dans notre programme Java.
String env = System.getProperty("langue");
Alors, quelle langue parlera notre application ? Vous dites le martien ? C’est ça !
Notre variable "langue" contient le nom du fichier de propriétés à charger, nous allons donc le charger:
Properties envVars = new Properties();
envVars.load(env);
NOTE: on a travaillé avec les propriétés, ce qui a un peu compliqué les choses, mais c’était pour donner un exemple pratique, on aurait aussi bien pu, par exemple, indiquer une image à charger:
java -Dimage=monLogo.gif MaClasse
ImageIcon img = new ImageIcon(System.getProperty("image"));
Il est très important dans tous les cas de ne pas laisser d’espace entre le -D et le nom de la variable et des deu côtés du =.
2) Second type
Si vous avec compris le premier type, vous avec compris le second, car c’est une variation du premier…
On définit une variable, par exemple:
# Sous DOS (Windows), on ajoute cette ligne à l’autoexec.bat
MON_CHEMIN_PERSO="C:\Mes Documents\Mes Images\"
# Sous UNIX
export MON_CHEMIN_PERSO=/home/moi/mes_images/:$MON_CHEMIN_PERSO
Et au lancement de notre programme Java, on écrira:
# Windows
java MaClasse %MON_CHEMIN_PERSO%
# UNIX
java MaClasse $MON_CHEMIN_PESO
La procédure pour récupérer la variable dans le programme, on la lit dans la méthode main() comme argument[0].
Personnellement je n’aime pas cette methode, mais elle existe…
3) Troisième type
Comme expliqué plus haut, le troisième type est totalement différent: vous ne pouvez pas modifier les variables d’environnement ce de type, elles sont internes au langage Java et servent à fournir des informations sur la JVM hôte.
La syntaxe pour récupérer ce genre de propriétés est la suivante:
String propriete = java.lang.System.getProperty(String prop);
Exemple:
final String USER_HOME = System.getProperty("user.home");
Voici un tableau des différentes propriétés auxquelles l’on peut avoir accès:
Sur fond bleu clair les plus utilisées.
Valeur |
Signification |
java.version |
Version du JRE |
java.vendor |
"Vendor" du JRE |
java.vendor.url |
URL du "Vendor" |
java.vm.specification.version |
JVM version de specification |
java.vm.specification.vendor |
JVM "vendor" de specification |
java.vm.specification.name |
JVM nom de specification |
java.vm.version |
JVM version d'implémentation |
java.vm.vendor |
JVM "vendor" d'implémentation |
java.vm.name |
JVM nom d'implémentation |
java.home |
Répertoire de java.exe |
java.specification.version |
JRE version de specification |
java.specification.vendor |
JRE "vendor" de specification |
java.specification.name |
JRE nom de specification |
java.class.version |
Numéro de version de Java |
java.class.path |
Le CLASSPATH |
java.ext.dirs |
Répertoire des extensions |
os.name |
Nom du système d'exploitation |
os.arch |
Nom de l'architechture de l'OS |
os.version |
Numéro de version de l'OS |
file.separator |
Sérarateur de fichiers (1) |
line.separator |
Séparateur de lignes (2) |
path.separator |
Séparateur de chemins (3) |
user.name |
Nom du compte utilisateur |
user.home |
Répertoire par défaut de l'utilisateur |
user.dir |
Répertoire où se trouve la classe principale |
(1) "/" sous UNIX "\" sous Windows</p> (2) (3) Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com |