1

由于某种原因,此代码仅在我关闭输出流时才有效。我怎样才能让它工作而不必关闭它?

我想让它保持打开状态,这样我就可以继续向进程发送数据而无需重新启动它。

ProcessBuilder pbuilder = new ProcessBuilder(procCmds);
            pbuilder.directory(new File(workingDir));
            Process p = pbuilder.start();

    BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
    String str = "hello world heard from java\n";
    outputStream.write(str, 0, str.length());
    outputStream.flush();
    System.out.println("wrote " + str);
    BufferedReader errorStream = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    BufferedReader inputStream = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = null;
    while((line=errorStream.readLine())!=null)
        System.out.println(line);
    while((line=inputStream.readLine())!=null)
        System.out.println(line);

    //p.waitFor();
    outputStream.close();
    errorStream.close();
    inputStream.close();
4

1 回答 1

1

您需要合并错误和输入流,或者在单独的线程中读取其中一个。目前您正在尝试将错误流读取到 EOS,这仅在进程退出时发生,因此您根本无法读取输入流。在进程退出之前,您也不会在输入流上获得 EOS,因此如果您要提供进一步的输出,将其读取到 EOS 也没有任何意义。可能您应该在单独的线程中读取两个流。

于 2012-10-22T06:51:11.420 回答