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

我不确定如何通过Java代码启动外部应用程序( 特别是在Windows )。 我不打算在Mac / Linux上使用这个Java代码,所以我们把重点放在Windows代码上。

我做了什么

过去两天我一直在研究这个问题,至今我还没有find答案。 我很容易findRuntime.getRuntime().exec()方法,但是我无法IntelliJ Idea中的本地工作区中find有关启动批处理(.bat)文件的信息

我在问什么

我只想知道如何在我的工作区 (如com.example.batch这样的文件夹) 执行本地batch file以及如何使用直接文件地址执行(.exe)或(.bat)。 (例如Windows碎片整理和优化驱动器 (.exe): C:\WINDOWS\system32\dfrgui.exe

感谢所有提前,我一直在为这个答案而死。

您是否阅读过基本的Runtime.exec()文章 ?

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

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

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

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

作为一个方面说明,请查看ProcessBuilder类。 它比Runtime好得多。 是的, Runtime文章中的所有规则都适用于ProcessBuilder

首先,你应该使用ProcessBuilder来执行外部程序,比Runtime.getRuntime().exec()更容易使用。

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