为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2021-06-28 13:27:59
我想从 java 按钮单击执行批处理文件代码。此外,我不希望从 Java 代码中显示任何命令提示符窗口。我有一个代码:-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所以我希望上面的代码从批处理命令运行, 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/mobilePhone.xyz --format=pdf --output=C:/Users/india/Desktop --logfile=C:/Users/india/Desktop/dofhdif.txt": CreateProcess error=2, The system cannot find the file specified    at java.lang.ProcessBuilder.start(Unknown Source)
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

试试这个:


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();

这说明以下几点:

  1. 命令与参数分开

  2. 参数值可以在运行时确定

  3. 命令的默认目录 ( C:\xyz-3.1.1\bin) 在启动进程之前设置

  4. 如果您希望进程的输出显示为 Java 应用程序输出的一部分,请考虑使用inheritIO()代替redirectErrorStream()


查看完整回答
反对 回复 2021-07-07
  • 2 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信