Java 如何使程序运行并与shell程序交互?

Java 如何使程序运行并与shell程序交互?,java,ubuntu,io,terminal,processbuilder,Java,Ubuntu,Io,Terminal,Processbuilder,我在Ubuntu终端中运行了一个程序,叫做ProgramABC,它读取一个查询,直到用户按下CTRL+D,然后将一些数据写入标准输出。它可以完美地工作: /path/ProgramABC >> file.txt [enter] <here I write my query> [enter] <and I press CTRL+D> <data is written to file.txt and ProgramABC closes automatical

我在Ubuntu终端中运行了一个程序,叫做ProgramABC,它读取一个查询,直到用户按下CTRL+D,然后将一些数据写入标准输出。它可以完美地工作:

/path/ProgramABC >> file.txt [enter]
<here I write my query> [enter]
<and I press CTRL+D>
<data is written to file.txt and ProgramABC closes automatically>
/path/ProgramABC>>file.txt[输入]
[输入]
我想从Java运行它。我的代码不起作用-它创建了file.txt,但它是空的,所以我猜将查询传递给进程,从而传递给ProgramABC是错误的。我做错了什么?以下是我代码的一部分:

    ProcessBuilder builder = new ProcessBuilder("bash","-c","/path/program ABC >> file.txt");
    builder.directory(new File("/another/path/"));
    Process process = builder.start();


    OutputStream stdin = process.getOutputStream();
    InputStream stdout = process.getInputStream();

    BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));

    writer.write("<my query here>");
    writer.write((char)4); //it's CTRL+D, right?
    writer.flush();
    writer.close();
ProcessBuilder=newprocessbuilder(“bash”、“-c”、“/path/program ABC>>file.txt”);
builder.directory(新文件(“/other/path/”);
Process=builder.start();
OutputStream stdin=process.getOutputStream();
InputStream stdout=process.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(stdout));
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(stdin));
作者:写(“”);
writer.write((char)4)//是CTRL+D,对吗?
writer.flush();
writer.close();