Java - Executer une Commande Shell en utilisant Runtime.exec

Par Softorks | Octobre 25, 2019 | Modifié : Octobre 25, 2019

English | French

1. Description

Runtime.exec (String commande) - Cette fonction donnes la possibilité d'executer une commande spécifiée comme argument dans un processus isolée.

2. Declaration


    public Process exec(String commande)
                    

3. Paramètres

commande - la commande à executer

4. Valeur de retour

Cette méthode retourne un objet ( processus )

5. Implémentation

Dans cette exemple, Nous allons exécuter la commande ls -l / qui nous permet de lister tous les dossiers présent dans le fichier mère et montrer leurs permissions.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ExecuterUneCommandeShellRuntimeExec {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			Process processus = Runtime.getRuntime().exec("ls -l /"); 
			
			StringBuilder resultat = new StringBuilder(); 
			
			BufferedReader lecteur = new BufferedReader(new InputStreamReader(processus.getInputStream())); 
			
			String ligne;
			
			while ((ligne = lecteur.readLine()) != null) {
				resultat.append(ligne + "\n"); 
			}
			
			int valeurDeSortie = processus.waitFor();
			if (valeurDeSortie == 0) {
				System.out.println("Success!");
				System.out.println(resultat); 
				System.exit(0);
			} else {
				System.out.println("Quelquechose de pas normal s'es produit :( "); 
			}
				
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
                       

Output:

vpn-133-230-1-200:~ softorks$ ls -l /
total 1544
drwxr-xr-x    4 softorks  staff     128 Aug 20  2018 Application Data
drwx------    5 softorks  staff     160 Jan  8  2019 Applications
drwx------+   9 softorks  staff     288 Sep 24 11:03 Desktop
drwx------+  15 softorks  staff     480 Sep 24 09:27 Documents
drwx------+ 197 softorks  staff    6304 Oct 24 09:25 Downloads
drwx------@  76 softorks  staff    2432 Sep 18 06:39 Library
drwx------+   5 softorks  staff     160 Aug 18 21:34 Movies
drwx------+   4 softorks  staff     128 Jan  4  2017 Music
drwx------+   6 softorks  staff     192 Aug 18 21:34 Pictures
drwxr-xr-x    3 softorks  staff      96 May 16 09:26 Postman
drwxr-xr-x+   5 softorks  staff     160 Dec  9  2016 Public
drwxr-xr-x    4 softorks  staff     128 Jun 11  2018 VirtualBox VMs
drwxr-xr-x   25 softorks  staff     800 Jul  9 04:13 eclipse-workspace
-rw-r--r--    1 softorks  staff   66191 Oct 22  2017 hs_err_pid17198.log
-rw-r--r--    1 softorks  staff  134743 Jul 16  2018 hs_err_pid1912.log
-rw-r--r--    1 softorks  staff   76625 Sep 18 08:22 hs_err_pid1913.log
-rw-r--r--    1 softorks  staff   75519 Aug 27 21:48 hs_err_pid50642.log
-rw-r--r--    1 softorks  staff   75665 Oct  2 09:49 hs_err_pid6050.log
-rw-r--r--    1 softorks  staff   75807 Oct  8 05:25 hs_err_pid65641.log
-rw-r--r--    1 softorks  staff   76034 Sep  6 19:07 hs_err_pid66238.log
-rw-r--r--    1 softorks  staff   76001 Aug 20 10:06 hs_err_pid74698.log
drwxrwxr-x    3 softorks  staff      96 Jul 29 18:25 tmp
                        

6. traceroute Exemple

Dans cette exemple, nous allons la commande traceroute, cette commande nous permet de visualiser les addresses IP de tous les routeurs présent entre une source et une destination.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ExecuterUneCommandeShellRuntimeExec {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			Process processus = Runtime.getRuntime().exec("traceroute google.com"); 
			
			StringBuilder resultat = new StringBuilder(); 
			
			BufferedReader lecteur = new BufferedReader(new InputStreamReader(processus.getInputStream())); 
			
			String ligne;
			
			while ((ligne = lecteur.readLine()) != null) {
				resultat.append(ligne + "\n"); 
			}
			
			int valeurDeSortie = processus.waitFor();
			if (valeurDeSortie == 0) {
				System.out.println("Success!");
				System.out.println(resultat); 
				System.exit(0);
			} else {
				System.out.println("Quelquechose de pas normal s'es produit :( "); 
			}
				
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
                        

Output:

vpn-133-230-1-200:~ softorks$ traceroute softorks.com
traceroute to softorks.com (162.241.252.212), 64 hops max, 52 byte packets
Success!
 1  www.routerlogin.com (192.168.1.1)  1.586 ms  1.026 ms  0.867 ms
 2  96.120.5.17 (96.120.5.17)  9.685 ms  9.463 ms  9.450 ms
 3  68.86.108.157 (68.86.108.157)  9.274 ms  9.259 ms  10.773 ms
 4  ae-127-ar01.b0atlanta.ga.atlanta.comcast.net (68.85.111.57)  10.846 ms  11.614 ms  10.604 ms
 5  be-7725-cr02.56marietta.ga.ibone.comcast.net (68.86.93.125)  10.799 ms  12.822 ms  13.043 ms
 6  be-11423-cr01.houston.tx.ibone.comcast.net (68.86.85.22)  25.407 ms  24.295 ms  25.082 ms
 7  be-12393-pe01.westwaypark.tx.ibone.comcast.net (68.86.82.130)  25.823 ms  29.697 ms  25.908 ms
 8  as8075-1.2001sixthave.wa.ibone.comcast.net (75.149.230.54)  24.768 ms  34.744 ms  25.163 ms
 9  216.117.50.150 (216.117.50.150)  25.181 ms  26.132 ms  25.555 ms
10  po101.router2b.hou1.net.unifiedlayer.com (162.241.0.9)  30.393 ms  25.708 ms  25.705 ms
11  162-241-150-61.unifiedlayer.com (162.241.150.61)  35.956 ms
    162-241-150-63.unifiedlayer.com (162.241.150.63)  29.843 ms
    162-241-150-61.unifiedlayer.com (162.241.150.61)  24.475 ms
12  box5741.bluehost.com (162.241.252.212)  24.784 ms  24.953 ms  24.784 ms
                        

7. Régardez le Tutoriel...