Cum să rulați comenzile terminalelor Windows, Linux, macOS în Java și să returnați rezultatul complet

Publicat: 2019-02-26

Executați comenzile Linux mkdir, ls -ltra și ping în Java

Executarea unei system command este relativ simplă – odată ce ați văzut-o făcută prima dată.

Implică utilizarea a două clase Java, clasa Runtime și clasa Process. Practic, utilizați exec method a clasei Runtime pentru a rula comanda ca proces separat.

Invocarea metodei exec returnează un obiect Process pentru gestionarea subprocesului. Apoi utilizați getInputStream() și getErrorStream() ale obiectului Process pentru a citi rezultatul normal al comenzii și rezultatul de eroare al comenzii. Ceea ce faceți cu rezultatul comenzii executate depinde în întregime de dvs. și de aplicația pe care o creați.

Metodele ProcessBuilder.start() și Runtime.exec creează un proces nativ și returnează o instanță a unei subclase de Process care poate fi folosită pentru a controla procesul și a obține informații despre acesta.

Clasa Process oferă metode pentru efectuarea intrărilor din proces, efectuarea ieșirii către proces, așteptarea finalizării procesului, verificarea stării de ieșire a procesului și distrugerea (uciderea) procesului.

Metodele care creează procese pot să nu funcționeze bine pentru procese speciale pe anumite platforme native, cum ar fi procesele native de ferestre, procesele demon, procesele Win16/DOS pe Microsoft Windows sau scripturile shell.

În mod implicit, subprocesul creat nu are propriul terminal sau consolă. Toate operațiunile sale standard I/O (adică stdin, stdout, stderr) vor fi redirecționate către procesul părinte, unde pot fi accesate prin fluxurile obținute folosind metodele getOutputStream() , getInputStream() și getErrorStream() .

Procesul părinte folosește aceste fluxuri pentru a alimenta intrarea și a obține rezultate din subproces. Deoarece unele platforme native oferă doar o dimensiune limitată a bufferului pentru fluxurile de intrare și de ieșire standard, eșecul de a scrie prompt fluxul de intrare sau de a citi fluxul de ieșire al subprocesului poate cauza blocarea subprocesului sau chiar blocarea.

Mai jos sunt două exemple simple Java pentru referință.

Exemplul-1. Executați mkdir, ls -ltra și ping în Java

  • Creați fișierul CrunchifyCommandJava.java
  • Executați mkdir /Users/ashah/Desktop/new-folder
  • Executați ls -ltra /Library
  • Executați ping crunchify.com

Asigurați-vă că schimbați calea în mod corespunzător în programul de mai sus, conform setărilor sistemului dvs.

Ieșire consola Eclipse:

Doar rulați programul de mai sus ca o aplicație Java și veți vedea un rezultat similar.

Exemplul-2.

  • CrunchifyRunCommand.java
  • Executați comanda ps -few pentru a obține lista tuturor proceselor care rulează pe sistemul dumneavoastră.

Ieșire consola Eclipse:

Acestea sunt câteva dintre procesele care rulează pe MacBook Pro. Mai sunt destul de multe, dar lipite foarte puține.

Sper că acest tutorial vă ajută să rulați orice comenzi de terminale Linux, macOS folosind un program Java simplu. Anunță-mă pentru orice întrebări.