Java:使用特定参数运行可执行程序

时间:2013-11-06 10:08:01

标签: java batch-file

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

以这种方式,程序将outoput存储在文件“output.txt”中。

我累了:

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

不会创建输出文件。

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

3 个答案:

答案 0 :(得分:2)

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

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

还要确保启动后台线程,该后台线程读取子进程的输出。如果出现问题,那么孩子会在其标准输出上输出错误信息,如果你没有主动阅读,那么这个输出就会丢失。

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

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