我想执行一个批处理文件代码从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文件路径。
我是通过java代码在按钮上单击transform完成这一操作的:-
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)发布于 2018-08-08 11:00:44
试试这个:
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()而不是redirectErrorStream()。发布于 2018-08-08 10:20:32
正如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;在JDK5.0之前,启动进程并执行它的唯一方法是使用java.lang.Runtime类的exec()方法,然后可以使用ProcessBuilder来帮助创建操作系统进程。
主要的改进是,对于影响流程的所有属性,它还充当持有者。这就是它的使用方式:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");实际上,Runtime.getRuntime().exec也可以与String...一起使用,如:
Runtime.getRuntime().exec(new String[]{"curl", "-v", "--cookie", tokenString, urlString});我个人的喜好:
working directory或environment variables,并且还要多次执行命令,最好使用它,因为ProcessBuilder将保存设置,您只需要使用processBuilder.start()创建具有相同设置的另一个进程;Runtime.getRuntime().exec,因为您可以直接在那里执行它,而不会对参数格式产生任何影响。https://stackoverflow.com/questions/51743942
复制相似问题