如何在 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 终端命令。 让我知道任何问题。