6

我已经通过以下 URL 的 StreamGobbler

JavaWorld : 流食者

我了解它的用法和实施的原因。然而,所涵盖的场景只是那些可能有来自命令/处理错误的输出的场景。

我没有发现任何使用 StreamGobbler 处理输入的场景。例如,在 中mailx,我必须指定电子邮件的正文,我已按以下格式完成

Process proc = Runtime.getRuntime().exec(cmd);
OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(mailBody);
osw.close();

这如何通过 StreamGobbler 处理,或者不需要通过它处理。

4

1 回答 1

7

理想情况下,StreamGobbler如果您已经期待 on 上的某些内容,您将在错误流上使用(在单独的线程中)InputStream,以查看何时process.waitFor()返回非零值以找出错误消息。如果您对 不感兴趣InputStream,那么您可以在完成对命令的输入后直接在代码中读取 ErrorStream。

Process proc = Runtime.getRuntime().exec(cmd)
// Start a stream gobbler to read the error stream.
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
errorGobbler.start();

OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream())
osw.write(mailBody)
osw.close();

int exitStatus = proc.waitFor();
if (0 != exitStatus) {
    /*
     * If you had not used a StreamGobbler to read the errorStream, you wouldn't have
     * had a chance to know what went wrong with this command execution.
     */
    LOG.warn("Error while sending email: " + errorGobbler.getContent());
}
于 2012-09-04T07:18:25.590 回答