我正在制作一个程序,我希望它能像这样运作
my_program -o Words
“Words”是一个文件,但我也希望它能够使用管道输入而不是来自文件,所以
grep test Words | my_program -o
如何收集和存储数据中的管道?如何检查数据是否已通过管道输入?
答案 0 :(得分:1)
要读取管道数据,您应该从程序中的stdin读取。
grep test Words | my_program -o
在您的示例中,|
将grep test Words
的标准输出管道传递给my_program
的标准输入。请参阅 article on streams, pipes, and redirects。
答案 1 :(得分:1)
可以使用System.in
,Scanner
等标准工具从BufferedInputReader
读取数据管道。
不是检查管道输入,而是检查相反的条件可能更容易:如果文件已被指定为参数,如果尚未指定,则从标准输入读取
答案 2 :(得分:1)
在Java中:
System.in
“是”stdin; System.out
“是”stdout; System.err
“是”stderr。通过使用管道,您重定向stdin,因此foo | bar
将任何foo
输出重定向到stdout到bar
的标准输入。
System.in
是InputStream
。如果你想有可能从stdin和文件中读取,有一种可能性就是这样做:
InputStream in = System.in;
if (hasOptionToReadFromFile)
in = Files.newInputStream(Paths.get(fileName));