如何在java中使用ProcessBuilder调用.bat文件并发送字符串

如何在java中使用ProcessBuilder调用.bat文件并发送字符串,java,processbuilder,Java,Processbuilder,我需要能够在我的Java项目中实现以下目标- 1) 使用ProcessBuilder类调用.bat文件 2) 使用Process.getOutPutStream()将命令发送到该子进程(.bat应用程序) 我能够完成第一部分,但无法完成第二部分 因此,我们的想法是打开一个bat文件(oddJobTest.bat),它是本地的另一个Java程序,并向该文件发送一些特定的命令。这个java应用程序实际上包含一些开关大小写逻辑,只有当我能够传递特定的字符串/命令时才能触发这些逻辑。 例如: -如果我通

我需要能够在我的Java项目中实现以下目标- 1) 使用ProcessBuilder类调用.bat文件 2) 使用Process.getOutPutStream()将命令发送到该子进程(.bat应用程序)

我能够完成第一部分,但无法完成第二部分

因此,我们的想法是打开一个bat文件(oddJobTest.bat),它是本地的另一个Java程序,并向该文件发送一些特定的命令。这个java应用程序实际上包含一些开关大小写逻辑,只有当我能够传递特定的字符串/命令时才能触发这些逻辑。 例如: -如果我通过了“bac”,那么就开始交易逻辑 -如果我通过了“eac”,则执行结束事务逻辑

CoreCashMqttClient.connect();
File oddJobTest = new File("C:/spool/oddjob/build/distributions/oddjob- 
0.2.1-SNAPSHOT/oddjob-0.2.1-SNAPSHOT/bin");
    //Use of"/K" makes sure that the OddJob.bat remains active.
ProcessBuilder pbOddJob = new ProcessBuilder("cmd.exe", "/K", 
"Start","oddjobTest.bat");      
    pbOddJob.directory(oddJobTest);             
    try {
        p = pbOddJob.start();

        System.out.println(p.toString());

    } catch (IOException e) {
        e.printStackTrace();
    }       

    String payload = ""; // pass some data
    CoreCashMqttClient.publish(payload);
    Thread.sleep(5000);
    OutputStreamWriter writer = new OutputStreamWriter(p.getOutputStream());
    try {
        writer.write("bac");
    } catch (IOException e) {
        e.printStackTrace();
    }
使用下面的代码-我希望作为子进程打开的命令行应该以字符串形式接收“bac”

OutputStreamWriter writer = new OutputStreamWriter(p.getOutputStream());
writer.write("bac");

使用
ProcessBuilder pbOddJob=newprocessbuilder(“oddjobTest.bat”)有什么问题?我收到此错误-java.io.IOException:无法运行程序“oddjobTest.bat”(在目录“C:\spool\oddjob\build\distributions\oddjob-0.2.1-SNAPSHOT\oddjob-0.2.1-SNAPSHOT\bin”中):CreateProcess error=2,系统找不到指定的文件dok,确保将工作
目录
设置为与
oddjobTest.bat
与工作目录存储在同一位置。您的意思是“pbodjob.directory(oddjobTest)”吗?这里oddJobTest指向oddJobTest.bat文件的存储位置。是的,我会确保该文件存在于所述目录中-不要假设