【问题标题】:Java redirect input and output streamJava重定向输入输出流
【发布时间】:2015-09-07 14:09:06
【问题描述】:

要在终端中执行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

我做错了吗?

【问题讨论】:

    标签: java stream processbuilder


    【解决方案1】:

    从您给出的示例看来,您似乎正在调整来自this thread 的 Linux 代码,以便使用 senna.exe 在 Windows 上运行。

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

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

    【讨论】:

    • 我已经检查了文件路径,但这不是错误消息的原因。
    【解决方案2】:

    据我所知,您尚未将目录路径设置为 ProcessBuilder 对象。此错误似乎是因为 senna 文件夹中有一个名为“hash”的文件夹无法访问。

    请试试这个: builder.directory(new File("/yourpathtosenna/senna/")); (我在linux机器上)

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2014-04-30
      • 1970-01-01
      • 2012-07-19
      相关资源
      最近更新 更多