0

我需要在 java 中运行可执行程序 (.exe)。该程序有两种不同的操作模式:GUI 和命令行。从命令行启动程序的语法如下: C:\Users\Ermanno\Desktop\ "programFolder"\"program.exe" /stext output.txt

通过这种方式,程序将输出存储在文件“output.txt”中。

我累了:

Process p = new ProcessBuilder("C:\\Users\\Ermanno\\Desktop\\programFolder\\program.exe" ,"/stext a.txt").start();

不创建输出文件。

我也厌倦了使用包含命令的文件批处理并将其运行到 java,但结果是相同的。

4

3 回答 3

2

您需要在单个字符串中传递每个参数:

... program.exe", "/stext", "a.txt")...

还要确保启动读取子进程输出的后台线程。如果有问题,那么孩子会在它的标准输出中打印一条错误消息,如果你不主动阅读它,那么这个输出就会丢失。

为此,循环遍历流p.getInputStream()p.getErrorStream().

后者尤其重要,因为您说“我也厌倦了使用文件批处理”。Java 没有做任何与批处理脚本不同的事情。如果您无法从批处理中运行该命令,那么它也无法在 Java 中运行。

于 2013-11-06T10:19:59.797 回答
1

我使用 JDK ProcessBuilder 和 Runtime.getRuntime().exec 的经历很糟糕。然后我搬到了 Apache commons-exec。这是一个例子:

String line = "AcroRd32.exe /p /h " + file.getAbsolutePath();
CommandLine cmdLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);
于 2013-11-06T11:01:31.343 回答
0

我使用文件浴解决了。该文件包含命令。

String [] _s = {"cmd.exe", "/c", "start", "file.bat"}; Process pr = Runtime.getRuntime().exec(_s);

于 2013-11-07T08:13:45.450 回答