用heredoc输入Java命令行

时间:2011-07-13 13:08:48

标签: java input command-line heredoc

我有一个令人沮丧的简单问题:我需要编写一个接受表单输入的程序:

cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF

但是当我尝试在main()中执行任何操作时,我的args []总是空的。即使cat << EOF | echo后跟输入也不会在终端产生任何输出。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

使用standard input stream

public static void main(String[] args) throws Exception {
  InputStreamReader inputReader = new InputStreamReader(System.in);
  BufferedReader reader = new BufferedReader(inputReader);
  String line = null;
  while ((line = reader.readLine()) != null) {
    System.out.println(line);
  }
  reader.close();
  inputReader.close();
}

答案 1 :(得分:2)

您没有向程序提供任何参数,因此当然args[]为空。

您可以从System.in读取heredoc。

您似乎对参数(args[])和stdinSystem.in)之间的区别感到困惑。

echo参数args[])写入stdout,例如:

$ echo foo bar
foo bar

catstdinSystem.in)写入stdout,例如:

$ cat << EOF
> foo bar
> EOF
foo bar

$ echo foo bar | cat     # Useless use of cat
foo bar

您的cat << EOF | echo示例无效,因为echo未读取stdin

此外,您对cat的使用毫无用处。你可以写

$ java myProgram.java << EOF
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF