[英]Run batch file code from java code
我想从Java按钮单击执行批处理文件代码。 我也不希望任何命令提示符窗口都显示在Java代码中。
我有一个代码:-
C:\xyz-3.1.1\bin>dita --input=C:/Users/india/Desktop/mobile-phone/m
obilePhone.xyz --format=pdf --output=C:/Users/india/Desktop --logfile=C:/Use
rs/india/Desktop/dofhdif.txt
因此,我希望上述代码从批处理命令以C:\\ xyz-3.1.1 \\ bin>作为父目录运行。
另外,每当我从JFileChooser选择新文件时,我都想更新--input文件路径。
我是通过按钮单击转换上的Java代码完成此操作的:-
ProcessBuilder pb=new ProcessBuilder("dita --input=C:/Users/india/Desktop/mobile-phone/mobilePhone.xyz --format=pdf --output=C:/Users/india/Desktop --logfile=C:/Users/india/Desktop/dofhdif.txt");
pb.redirectErrorStream(true);
Process process=pb.start();
并得到IOException错误。
我在这里呆了很长时间,我要去哪里错了。
编辑:-错误
java.io.IOException: Cannot run program "dita --input=C:/Users/india/Desktop/mobile-phone/m
obilePhone.xyz --format=pdf --output=C:/Users/india/Desktop --logfile=C:/Use
rs/india/Desktop/dofhdif.txt": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
如Error
所述,它无法找到命令,因为ProcessBuilder
会将整个字符串视为命令 。
尝试直接使用Runtime.getRuntime().exec
,但是必须确保可以找到命令dita
。
Process process = Runtime.getRuntime().exec("C:\xyz-3.1.1\bin>dita --input=C:/Users/india/Desktop/mobile-phone/mobilePhone.xyz --format=pdf --output=C:/Users/india/Desktop --logfile=C:/Users/india/Desktop/dofhdif.txt");
process.waitFor();
int exitCode = process.exitValue();
System.out.println(IoHelper.output(process.getInputStream())); // handle the output;
在JDK 5.0之前,启动进程并执行它的唯一方法是使用java.lang.Runtime类的exec()方法,之后可以使用ProcessBuilder来帮助创建操作系统进程。
主要改进之处是,它也充当所有那些影响过程属性的持有人 。 这是应该如何使用:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
PS实际上Runtime.getRuntime().exec
也可以与String...
一起使用,如下所示:
Runtime.getRuntime().exec(new String[]{"curl", "-v", "--cookie", tokenString, urlString});
我个人的喜好:
如果必须为命令配置环境:以控制working directory
或environment variables
,并且还想多次执行命令,则最好使用它,因为ProcessBuilder
将保存设置,而您需要做的是只需processBuilder.start()
创建具有相同设置的另一个进程;
如果您要执行如上所述的整个长字符串命令,则最好只使用Runtime.getRuntime().exec
因为您可以在那里直接执行它而无需理会参数格式。
尝试这个:
String inputFile = ...;
String outputFile = ...;
String logFile = ...;
ProcessBuilder pb = new ProcessBuilder(
"dita",
"--input=" + inputFile,
"--format=pdf",
"--output=" + outputFile,
"--logfile=" + logFile)
.directory(new File("C:\\xyz-3.1.1\\bin"))
//.inheritIO();
.redirectErrorStream(true);
Process process = pb.start();
这显示了以下几点:
C:\\xyz-3.1.1\\bin
) inheritIO()
而不是redirectErrorStream()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.