ProcessBuilder - Java donne la possibilité d'exécuter des commandes shell programmaticallement. Une des méthode courrament utilisée est la classe ProcessBuilder
Dans cet example, Nous exécuterons une commande ping vers google.fr et nous illustrerons le résultat sur la console.
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class Test2 { public static void main (String [] args) throws IOException, InterruptedException{ String [] commande = {"ping", "google.fr"}; ProcessBuilder processusBuilder = new ProcessBuilder(commande); processusBuilder.directory(new File(System.getProperty("user.home"))); try { Process processus = processusBuilder.start(); BufferedReader lecteur = new BufferedReader (new InputStreamReader(processus.getInputStream())); String ligne; while ((ligne = lecteur.readLine()) != null) { System.out.println(ligne); } int codeDeSortie = processus.waitFor(); System.out.println ("\nstop avec erreur : " + codeDeSortie); } catch (IOException e) { e.printStackTrace(); } } }
Résultat:
PING google.fr (74.125.21.94): 56 data bytes 64 bytes from 74.125.21.94: icmp_seq=0 ttl=43 time=20.508 ms 64 bytes from 74.125.21.94: icmp_seq=1 ttl=43 time=18.310 ms 64 bytes from 74.125.21.94: icmp_seq=2 ttl=43 time=20.880 ms 64 bytes from 74.125.21.94: icmp_seq=3 ttl=43 time=19.307 ms 64 bytes from 74.125.21.94: icmp_seq=4 ttl=43 time=21.668 ms 64 bytes from 74.125.21.94: icmp_seq=5 ttl=43 time=21.370 ms 64 bytes from 74.125.21.94: icmp_seq=6 ttl=43 time=22.013 ms
Dans cette exemple, Nous exécuterons une commande appelée traceroute vers google.fr et nous illustrerons le résultat sur la console.
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class Test2 { public static void main (String [] args) throws IOException, InterruptedException{ String [] commande = {"traceroute", "google.fr"}; ProcessBuilder processusBuilder = new ProcessBuilder(commande); processusBuilder.directory(new File(System.getProperty("user.home"))); try { Process processus = processusBuilder.start(); BufferedReader lecteur = new BufferedReader (new InputStreamReader(processus.getInputStream())); String ligne; while ((ligne = lecteur.readLine()) != null) { System.out.println(ligne); } int codeDeSortie = processus.waitFor(); System.out.println ("\nstop avec erreur : " + codeDeSortie); } catch (IOException e) { e.printStackTrace(); } } }
Output:
1 alprgaedcraaf01-v2.pmtr.sest.att.com (135.28.160.193) 18.926 ms 18.093 ms 16.599 ms 2 alprgaedcrain01-tenge1-3.pmtr.sest.att.com (135.28.160.40) 18.073 ms 20.699 ms 19.301 ms 3 135.28.172.125 (135.28.172.125) 20.633 ms 14.902 ms 17.817 ms 4 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 17.973 ms 16.154 ms 27.353 ms 5 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 93.864 ms 47.404 ms 18.834 ms 6 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 26.677 ms 24.351 ms 19.749 ms 7 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 16.129 ms 29.481 ms 23.049 ms 8 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 96.747 ms 51.821 ms 15.854 ms 9 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 19.855 ms * 16.980 ms 10 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 20.238 ms 22.404 ms 685.833 ms 11 gaalxbm05a-intdef_1-inetpmtrvirt.pst.cso.att.com (144.160.226.53) 18.249 ms 20.008 ms 22.106 ms