gpt4 book ai didi

java - 从java代码运行批处理文件代码

转载 作者:行者123 更新时间:2023-12-01 19:49:59 25 4
gpt4 key购买 nike

我想通过单击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");

附注实际上 Runtime.getRuntime().exec 也可以与 String... 一起使用,如下所示:

Runtime.getRuntime().exec(new String[]{"curl", "-v", "--cookie", tokenString, urlString});

我的个人喜好:

  1. 如果您必须为命令配置环境:控制工作目录环境变量,并且您还想多次执行命令,您最好使用它,因为 ProcessBuilder 将保存设置,您需要做的只是 processBuilder.start() 来创建具有相同设置的另一个进程;

  2. 如果您想执行您提到的整个长字符串命令,您最好只使用 Runtime.getRuntime().exec 因为您可以直接执行它而无需任何操作参数格式的麻烦。

关于java - 从java代码运行批处理文件代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51743942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com