Java - 执行外部 Windows 应用程序?

Java - Execute External Windows Applications?

我不确定如何通过 启动外部应用程序(特别是在 Windows 上Java 代码。我不打算将此 Java 代码用于 Mac/Linux,所以让我们关注 Windows代码.

我做了什么

这两天我一直在研究这个问题,但我仍然没有找到答案。我很容易找到 Runtime.getRuntime().exec() 方法,但问题是我无法在 IntelliJ Idea 中找到有关从本地工作区启动批处理 (.bat) 文件的信息 .

我在问什么

我只想知道如何在我的工作区中执行本地批处理文件(在像 com.example.batch 这样的文件夹中)and/or如何执行带有直接文件地址的 (.exe) 或 (.bat)。 (例如 碎片整理和优化驱动器 (.exe) for Windows: C:\WINDOWS\system32\dfrgui.exe)

提前感谢大家,我一直渴望得到这个答案。

首先,您应该使用 ProcessBuilder 来执行外部程序,以获得比 Runtime.getRuntime().exec() 更易于使用的界面。

其次,要执行.bat文件,您所要做的就是执行cmd.exe并在/C选项中传递批处理文件名。请注意,当您 运行 批处理文件时,您正在启动 DOS cmd 处理器并告诉它 运行 批处理文件而不是从终端读取。因此,批处理文件必须位于 cmd.exe 可访问的位置。因此它不能在包含您的 Java 程序的 jar 文件中。如果有必要将它分发到 jar 中,您必须将它复制到某个文件系统中。

你读过基本内容了吗Runtime.exec() article

本文第 2 页列出了一个常见的陷阱:Runtime.exec() 不是命令行

.bat 文件不是可执行文件。它们是指令的集合。就像 Linux 中的 shell 脚本一样,您需要一些东西来实际执行这些指令。

在这种情况下,您的可执行文件是 cmd.exe,它将以 /Ccom.example.batch 作为参数:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"});

作为旁注,请查看 ProcessBuilder class。它比 Runtime 好得多。是的,Runtime 文章中的所有规则都适用于 ProcessBuilder