Java重定向输入和输出流

时间:2015-09-07 14:09:06

标签: java stream processbuilder

要在终端中执行SENNA,请使用以下命令:

senna.exe < input.txt > result.txt

现在我想在java程序中实现这一点。到目前为止,这是我的代码

ProcessBuilder builder = new ProcessBuilder("senna.exe");
builder.redirectErrorStream(true);
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("This is a test sentence");;
writer.flush();
String line;
while ((line = reader.readLine ()) != null) {
    System.out.println ("Stdout: " + line);
}

为了重定向输入,输出和错误流,我使用了this thread中的代码。问题是我收到以下错误消息:

  

致命错误:无法打开文件hash / words.lst

我做错了吗?

2 个答案:

答案 0 :(得分:0)

从您给出的示例中,您似乎正在调整this thread中的Linux代码,以便在带有senna.exe的Windows上运行。

从您收到的错误中,您似乎忘记将Linux的正斜杠(/)更改为Windows'反斜杠(\)。

尝试将文件路径的forwardslash更改为反斜杠。

答案 1 :(得分:0)

据我所知,您还没有设置ProcessBuilder对象的目录路径。这个错误似乎是因为有一个名为&#39; hash&#39;的文件夹。在Senna文件夹中,无法联系到。

请试试这个:     builder.directory(新文件(&#34; / yourpathtosenna / senna /&#34;)); (我在linux机器上)

你的错误很可能会改变,但我不确定你是否会得到输出,因为我现在也在努力通过Linux在Linux机器上以交互方式运行senna。

祝你好运,如果成功,请更新!