如何在 Java 中運行 Windows、Linux、macOS 終端命令並返回完整結果

已發表: 2019-02-26

在 Java 中執行 Linux 命令 mkdir、ls -ltra 和 ping

執行system command相對簡單——只要你第一次看到它就完成了。

它涉及到兩個 Java 類的使用,即 Runtime 類和 Process 類。 基本上,您使用 Runtime 類的exec method將命令作為單獨的進程運行。

調用 exec 方法會返回一個用於管理子進程的 Process 對象。 然後使用Process對象的getInputStream()getErrorStream()方法來讀取命令的正常輸出,以及命令的錯誤輸出。 您對執行命令的輸出做什麼完全取決於您和您正在創建的應用程序。

ProcessBuilder.start()Runtime.exec方法創建本機進程並返回Process子類的實例,該實例可用於控制進程並獲取有關它的信息。

Process類提供了執行來自進程的輸入、執行輸出到進程、等待進程完成、檢查進程的退出狀態以及銷毀(殺死)進程的方法。

創建進程的方法可能不適用於某些本機平台上的特殊進程,例如本機窗口進程、守護進程、Microsoft Windows 上的 Win16/DOS 進程或 shell 腳本。

默認情況下,創建的子進程沒有自己的終端或控制台。 它的所有標準 I/O(即 stdin、stdout、stderr)操作都將被重定向到父進程,在那裡可以通過使用getOutputStream()getInputStream()getErrorStream()方法獲得的流來訪問它們。

父進程使用這些流向子進程提供輸入並從子進程獲取輸出。 由於部分原生平台只為標準輸入輸出流提供有限的緩衝區大小,未能及時寫入子進程的輸入流或讀取輸出流可能會導致子進程阻塞,甚至死鎖。

下面是兩個簡單的 Java 示例供您參考。

示例 1。 在 Java 中執行 mkdir、ls -ltra 和 ping

  • 創建文件 CrunchifyCommandJava.java
  • 執行mkdir /Users/ashah/Desktop/new-folder
  • 執行ls -ltra /Library
  • 執行ping crunchify.com

確保根據您的系統設置在上述程序中相應地更改路徑。

Eclipse 控制台輸出:

只需將上述程序作為 Java 應用程序運行,您將看到類似的結果。

示例 2。

  • CrunchifyRunCommand.java
  • 執行命令ps -few以獲取系統上運行的所有進程的列表。

Eclipse 控制台輸出:

這些是我的 MacBook Pro 上運行的一些進程。 還有很多,但粘貼的很少。

我希望本教程可以幫助您使用簡單的 Java 程序運行任何 linux、macOS 終端命令。 讓我知道任何問題。