So führen Sie Windows-, Linux- und macOS-Terminalbefehle in Java aus und geben das vollständige Ergebnis zurück

Veröffentlicht: 2019-02-26

Führen Sie die Linux-Befehle mkdir, ls -ltra und ping in Java aus

Das Ausführen eines system command ist relativ einfach – wenn Sie es das erste Mal gesehen haben.

Es beinhaltet die Verwendung von zwei Java-Klassen, der Runtime-Klasse und der Process-Klasse. Grundsätzlich verwenden Sie die exec method der Runtime-Klasse, um den Befehl als separaten Prozess auszuführen.

Das Aufrufen der exec-Methode gibt ein Process-Objekt zum Verwalten des Unterprozesses zurück. Dann verwenden Sie die Methoden getInputStream() und getErrorStream() des Process -Objekts, um die normale Ausgabe des Befehls und die Fehlerausgabe des Befehls zu lesen. Was Sie mit der Ausgabe des ausgeführten Befehls machen, liegt ganz bei Ihnen und der Anwendung, die Sie erstellen.

Die Methoden ProcessBuilder.start ProcessBuilder.start() und Runtime.exec erstellen einen nativen Prozess und geben eine Instanz einer Unterklasse von Process zurück, die verwendet werden kann, um den Prozess zu steuern und Informationen darüber zu erhalten.

Die Klasse Process stellt Methoden bereit, um Eingaben aus dem Prozess auszuführen, Ausgaben an den Prozess auszuführen, auf den Abschluss des Prozesses zu warten, den Beendigungsstatus des Prozesses zu überprüfen und den Prozess zu zerstören (zu beenden).

Die Methoden, die Prozesse erstellen, funktionieren möglicherweise nicht gut für spezielle Prozesse auf bestimmten nativen Plattformen, z. B. native Windowing-Prozesse, Daemon-Prozesse, Win16/DOS-Prozesse unter Microsoft Windows oder Shell-Skripts.

Standardmäßig hat der erstellte Unterprozess kein eigenes Terminal oder keine eigene Konsole. Alle seine Standard-E/A-Operationen (dh stdin, stdout, stderr) werden an den übergeordneten Prozess umgeleitet, wo sie über die Streams zugegriffen werden können, die mit den Methoden getOutputStream() , getInputStream() und getErrorStream() werden.

Der übergeordnete Prozess verwendet diese Streams, um Eingaben in den Unterprozess einzuspeisen und Ausgaben von ihm zu erhalten. Da einige native Plattformen nur eine begrenzte Puffergröße für standardmäßige Eingabe- und Ausgabestreams bereitstellen, kann ein Versäumnis, den Eingabestream sofort zu schreiben oder den Ausgabestream des Subprozesses zu lesen, dazu führen, dass der Subprozess blockiert oder sogar blockiert wird.

Unten sind zwei einfache Java-Beispiele als Referenz.

Beispiel 1. Führen Sie mkdir, ls -ltra und ping in Java aus

  • Erstellen Sie die Datei CrunchifyCommandJava.java
  • mkdir /Users/ashah/Desktop/new-folder
  • ls -ltra /Library
  • ping crunchify.com

Stellen Sie sicher, dass Sie den Pfad im obigen Programm gemäß Ihren Systemeinstellungen entsprechend ändern.

Ausgabe der Eclipse-Konsole:

Führen Sie einfach das obige Programm als Java-Anwendung aus und Sie werden ein ähnliches Ergebnis sehen.

Beispiel-2.

  • CrunchifyRunCommand.java
  • Führen Sie den Befehl ps -few aus, um eine Liste aller Prozesse zu erhalten, die auf Ihrem System ausgeführt werden.

Ausgabe der Eclipse-Konsole:

Dies sind einige der Prozesse, die auf meinem MacBook Pro ausgeführt werden. Es gibt einige mehr, aber nur sehr wenige eingefügt.

Ich hoffe, dieses Tutorial hilft Ihnen dabei, Linux- und MacOS-Terminalbefehle mit einem einfachen Java-Programm auszuführen. Bei Fragen einfach melden.