Comment exécuter les commandes de terminal Windows, Linux et macOS en Java et renvoyer le résultat complet

Publié: 2019-02-26

Exécutez les commandes Linux mkdir, ls -ltra et ping en Java

L'exécution d'une system command est relativement simple - une fois que vous l'avez vue la première fois.

Il implique l'utilisation de deux classes Java, la classe Runtime et la classe Process. Fondamentalement, vous utilisez la exec method de la classe Runtime pour exécuter la commande en tant que processus séparé.

L'appel de la méthode exec renvoie un objet Process pour gérer le sous-processus. Ensuite, vous utilisez les getInputStream() et getErrorStream() de l'objet Process pour lire la sortie normale de la commande et la sortie d'erreur de la commande. Ce que vous faites avec la sortie de la commande exécutée dépend entièrement de vous et de l'application que vous créez.

Les ProcessBuilder.start() et Runtime.exec créent un processus natif et renvoient une instance d'une sous-classe de Process qui peut être utilisée pour contrôler le processus et obtenir des informations à son sujet.

La classe Process fournit des méthodes pour effectuer l'entrée du processus, effectuer la sortie vers le processus, attendre la fin du processus, vérifier l'état de sortie du processus et détruire (tuer) le processus.

Les méthodes qui créent des processus peuvent ne pas fonctionner correctement pour des processus spéciaux sur certaines plates-formes natives, telles que les processus de fenêtrage natifs, les processus démons, les processus Win16/DOS sur Microsoft Windows ou les scripts shell.

Par défaut, le sous-processus créé n'a pas son propre terminal ou sa propre console. Toutes ses opérations d'E/S standard (c'est-à-dire stdin, stdout, stderr) seront redirigées vers le processus parent, où elles seront accessibles via les flux obtenus à l'aide des méthodes getOutputStream() , getInputStream() et getErrorStream() .

Le processus parent utilise ces flux pour alimenter en entrée et obtenir la sortie du sous-processus. Étant donné que certaines plates-formes natives ne fournissent qu'une taille de mémoire tampon limitée pour les flux d'entrée et de sortie standard, le fait de ne pas écrire rapidement le flux d'entrée ou de lire le flux de sortie du sous-processus peut entraîner le blocage du sous-processus, voire un blocage.

Vous trouverez ci-dessous deux exemples Java simples pour votre référence.

Exemple 1. Exécutez mkdir, ls -ltra et ping en Java

  • Créer le fichier CrunchifyCommandJava.java
  • Exécutez mkdir /Users/ashah/Desktop/new-folder
  • Exécutez ls -ltra /Library
  • Exécuter ping crunchify.com

Assurez-vous de modifier le chemin en conséquence dans le programme ci-dessus en fonction des paramètres de votre système.

Sortie console Eclipse :

Exécutez simplement le programme ci-dessus en tant qu'application Java et vous verrez un résultat similaire.

Exemple-2.

  • CrunchifyRunCommand.java
  • Exécutez la commande ps -few pour obtenir la liste de tous les processus en cours d'exécution sur votre système.

Sortie console Eclipse :

Voici quelques-uns des processus en cours d'exécution sur mon MacBook Pro. Il y en a pas mal d'autres mais très peu collés.

J'espère que ce didacticiel vous aidera à exécuter toutes les commandes de terminal linux, macOS à l'aide d'un programme Java simple. Faites-moi savoir pour toute question.