我有一个令人沮丧的简单问题:我需要编写一个接受表单输入的程序:
cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
但是当我尝试在main()中执行任何操作时,我的args []总是空的。即使cat << EOF | echo
后跟输入也不会在终端产生任何输出。我在这里做错了什么?
答案 0 :(得分:3)
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[]
)和stdin
(System.in
)之间的区别感到困惑。
echo
将参数(args[]
)写入stdout
,例如:
$ echo foo bar
foo bar
cat
将stdin
(System.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