1

我正在开发一个程序,我希望它像这样运行

my_program -o Words

其中“Words”是一个文件,但我也希望它能够使用管道输入而不是来自文件,所以

grep test Words | my_program -o

我如何收集和存储管道中的数据?如何检查数据是否已通过管道输入?

4

3 回答 3

1

在 Java 中:

  • System.in“是”标准输入;
  • System.out“是”标准输出;
  • System.err“是”标准错误。

通过使用管道,您重定向标准输入,因此foo | bar将任何foo输出重定向到标准输出到bar的标准输入。

System.in是一个InputStream。如果您希望有可能从标准输入和文件中读取,一种可能性是这样做:

InputStream in = System.in;

if (hasOptionToReadFromFile)
    in = Files.newInputStream(Paths.get(fileName));
于 2013-01-14T21:28:00.903 回答
1

要读取管道数据,您应该从程序中的标准输入读取。

grep test Words | my_program -o

在您的示例|中,将标准输出通过管道传输grep test Words到标准输入my_program。请参阅有关流、管道和重定向的文章。

于 2013-01-14T21:18:39.307 回答
1

可以System.in使用标准工具(如Scanner等)读取管道输入的数据BufferedInputReader

与其检查管道输入,不如检查相反的条件可能更容易:如果文件已被指定为参数,如果没有,则从标准输入中读取

于 2013-01-14T21:25:53.833 回答