Jak uruchomić polecenia terminala Windows, Linux, macOS w Javie i zwrócić pełny wynik

Opublikowany: 2019-02-26

Wykonywanie poleceń Linuksa mkdir, ls -ltra i ping w Javie

Wykonywanie system command jest stosunkowo proste – gdy zobaczysz je po raz pierwszy.

Polega na użyciu dwóch klas Java, klasy Runtime i klasy Process. Zasadniczo używasz exec method klasy Runtime, aby uruchomić polecenie jako oddzielny proces.

Wywołanie metody exec zwraca obiekt Process do zarządzania podprocesem. Następnie użyj getInputStream() i getErrorStream() obiektu Process , aby odczytać normalne dane wyjściowe polecenia oraz dane wyjściowe polecenia dotyczące błędów. To, co zrobisz z danymi wyjściowymi wykonanego polecenia, zależy wyłącznie od Ciebie i tworzonej aplikacji.

Metody ProcessBuilder.start() i Runtime.exec tworzą proces natywny i zwracają instancję podklasy Process , która może służyć do kontrolowania procesu i uzyskiwania o nim informacji.

Klasa Process udostępnia metody wykonywania danych wejściowych z procesu, wykonywania danych wyjściowych do procesu, oczekiwania na zakończenie procesu, sprawdzania statusu wyjścia procesu i niszczenia (zabijania) procesu.

Metody tworzące procesy mogą nie działać dobrze w przypadku procesów specjalnych na niektórych platformach natywnych, takich jak natywne procesy okienkowe, procesy demonów, procesy Win16/DOS w systemie Microsoft Windows lub skrypty powłoki.

Domyślnie utworzony podproces nie posiada własnego terminala ani konsoli. Wszystkie jego standardowe operacje I/O (tj. stdin, stdout, stderr) zostaną przekierowane do procesu nadrzędnego, gdzie można uzyskać do nich dostęp poprzez strumienie uzyskane za pomocą metod getOutputStream() , getInputStream() i getErrorStream() .

Proces nadrzędny wykorzystuje te strumienie do przekazywania danych wejściowych i uzyskiwania danych wyjściowych z podprocesu. Ponieważ niektóre platformy natywne zapewniają tylko ograniczony rozmiar bufora dla standardowych strumieni wejściowych i wyjściowych, brak natychmiastowego zapisania strumienia wejściowego lub odczytania strumienia wyjściowego podprocesu może spowodować zablokowanie podprocesu, a nawet zakleszczenie.

Poniżej znajdują się dwa proste przykłady Java w celach informacyjnych.

Przykład 1. Wykonaj mkdir, ls -ltra i ping w Javie

  • Utwórz plik CrunchifyCommandJava.java
  • Uruchom mkdir /Users/ashah/Desktop/new-folder
  • Wykonaj ls -ltra /Library
  • Wykonaj ping crunchify.com

Upewnij się, że odpowiednio zmieniłeś ścieżkę w powyższym programie, zgodnie z ustawieniami systemu.

Konsola Eclipse Wyjście:

Po prostu uruchom powyższy program jako aplikację Java, a zobaczysz podobny wynik.

Przykład-2.

  • CrunchifyRunCommand.java
  • Wykonaj polecenie ps -few , aby uzyskać listę wszystkich procesów uruchomionych w twoim systemie.

Konsola Eclipse Wyjście:

Oto niektóre z procesów uruchomionych na moim MacBooku Pro. Jest ich sporo więcej, ale wklejono bardzo niewiele.

Mam nadzieję, że ten samouczek pomoże ci uruchomić dowolne polecenia terminala linux, macOS za pomocą prostego programu Java. Daj mi znać w przypadku jakichkolwiek pytań.