【问题标题】:Command line java, file argument and piped input命令行 java、文件参数和管道输入
【发布时间】:2013-01-14 21:17:15
【问题描述】:

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

my_program -o Words

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

grep test Words | my_program -o

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

【问题讨论】:

  • 家庭作业中的“编程作业”?
  • 有价值的信息,但请记住 homework 标签已被禁止。 @foampile

标签: java command-line arguments pipe


【解决方案1】:

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

grep test Words | my_program -o

在您的示例中,|grep test Words 的标准输出通过管道传输到my_program 的标准输入。见 article on streams, pipes, and redirects

【讨论】:

    【解决方案2】:

    可以使用ScannerBufferedInputReader 等标准工具从System.in 读取管道数据。

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

    【讨论】:

      【解决方案3】:

      在 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));
      

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2010-09-16
        • 2012-10-22
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多