Comment exécuter une commande système depuis un programme Java ?

samedi 17 mars 2001

Cet article explique comment exécuter une commande système, c’est-à-dire comment faire pour que Java transmette au système d’exploitation une commande destinée normalement à une console (fenêtre MS-DOS sous Windows, Terminal sous UNIX, etc…).

Concrètement, si vous désirez exécuter dans l’ordre les instructions suivantes en ligne de commande:
- cd C:\Program Files\Microsoft Office\Office</span>
- Winword.exe
de manière à se placer dans le répertoire C:\Program Files\Microsoft Office\Office\ et à lancer Word 2000, le programme Java peut le faire pour vous. (Dans cet exemple, on peut se passer de la commande cd pour lancer Word, mais c’est aussi pour montrer que l’on ne se limite pas au lancement d’un programme, mais que l’on peut aussi exécuter d’autres commandes).

Ce genre de fonctions sous Java permet, entre autres, de lancer des logiciels externes (ici Word) depuis une application Java, ou de remplacer un script Bash.

Voici la procédure:
(NOTE: si vous connaissez un peu les systèmes d’exploitation et la programmation système, ne vous arrêtez pas aux explications minimales -et très imparfaites- concernant des concepts abstraits comme Runtime ou Processus…)

1 - Créer un objet String qui contient la commande exacte que vous taperiez si vous étiez sous la ligne de commande, par exemple:

// par exemple sous Windows
String command = "C:\Program Files\Microsoft Office\Office\Winword.exe";
// ou sous Linux 2.2.x
String command = "ipchains -P input DENY";

2 - Créer un objet Runtime et lui assigner le "runtime" (c-à-d l’environnement d’exécution, le noyau du système en quelque sorte) courant:

Runtime runtime = Runtime.getRuntime();

3 - Créer un nouveau processus, celui destiné à gérer notre commande:

Process process = null;

4 - Utiliser - assigner au processus - la fonction exec de la classe Runtime avec comme paramètre notre String , ceci est susceptible de générer des exceptions, nous devons donc les "attraper":

try
{
process = runtime.exec(command);
} catch(Exception err) {;}

Si tout se passe bien, la commande est exécutée, comme si vous l’aviez saisie dans une console.
NOTE: sous Unix, il faudra lancer le programme en tant que root pour que des commandes qui requièrent des privilèges élevés soient exécutées.

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Écrit à Montpellier le 17 mars 2001

Cet article explique comment exécuter une commande système, c’est-à-dire comment faire pour que Java transmette au système d’exploitation une commande destinée normalement à une console (fenêtre MS-DOS sous Windows, Terminal sous UNIX, etc…).

Concrètement, si vous désirez exécuter dans l’ordre les instructions suivantes en ligne de commande:
- cd C:\Program Files\Microsoft Office\Office</span>
- Winword.exe
de manière à se placer dans le répertoire C:\Program Files\Microsoft Office\Office\ et à lancer Word 2000, le programme Java peut le faire pour vous. (Dans cet exemple, on peut se passer de la commande cd pour lancer Word, mais c’est aussi pour montrer que l’on ne se limite pas au lancement d’un programme, mais que l’on peut aussi exécuter d’autres commandes).

Ce genre de fonctions sous Java permet, entre autres, de lancer des logiciels externes (ici Word) depuis une application Java, ou de remplacer un script Bash.

Voici la procédure:
(NOTE: si vous connaissez un peu les systèmes d’exploitation et la programmation système, ne vous arrêtez pas aux explications minimales -et très imparfaites- concernant des concepts abstraits comme Runtime ou Processus…)

1 - Créer un objet String qui contient la commande exacte que vous taperiez si vous étiez sous la ligne de commande, par exemple:

// par exemple sous Windows
String command = "C:\Program Files\Microsoft Office\Office\Winword.exe";
// ou sous Linux 2.2.x
String command = "ipchains -P input DENY";

2 - Créer un objet Runtime et lui assigner le "runtime" (c-à-d l’environnement d’exécution, le noyau du système en quelque sorte) courant:

Runtime runtime = Runtime.getRuntime();

3 - Créer un nouveau processus, celui destiné à gérer notre commande:

Process process = null;

4 - Utiliser - assigner au processus - la fonction exec de la classe Runtime avec comme paramètre notre String , ceci est susceptible de générer des exceptions, nous devons donc les "attraper":

try
{
process = runtime.exec(command);
} catch(Exception err) {;}

Si tout se passe bien, la commande est exécutée, comme si vous l’aviez saisie dans une console.
NOTE: sous Unix, il faudra lancer le programme en tant que root pour que des commandes qui requièrent des privilèges élevés soient exécutées.

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Écrit à Montpellier le 17 mars 2001