我正在开发一个程序,我希望它像这样运行
my_program -o Words
其中“Words”是一个文件,但我也希望它能够使用管道输入而不是来自文件,所以
grep test Words | my_program -o
我如何收集和存储管道中的数据?如何检查数据是否已通过管道输入?
我正在开发一个程序,我希望它像这样运行
my_program -o Words
其中“Words”是一个文件,但我也希望它能够使用管道输入而不是来自文件,所以
grep test Words | my_program -o
我如何收集和存储管道中的数据?如何检查数据是否已通过管道输入?
在 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));
要读取管道数据,您应该从程序中的标准输入读取。
grep test Words | my_program -o
在您的示例|中,将标准输出通过管道传输grep test Words到标准输入my_program。请参阅有关流、管道和重定向的文章。
可以System.in使用标准工具(如Scanner等)读取管道输入的数据BufferedInputReader。
与其检查管道输入,不如检查相反的条件可能更容易:如果文件已被指定为参数,如果没有,则从标准输入中读取