我正在开发一个程序,我希望它像这样运行
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
。
与其检查管道输入,不如检查相反的条件可能更容易:如果文件已被指定为参数,如果没有,则从标准输入中读取