我需要在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但结果是一样的。
答案 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);