Java命令行輸入我有一個令人沮喪的簡單的問題:我需要編寫一個接受的形式輸入的程序:與定界符
cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
但我ARGS []總是空的,當我嘗試做任何事情與它在main()中。即使輸入cat << EOF | echo
,也不會在終端上產生任何輸出。我在這裏做錯了什麼?
Java命令行輸入我有一個令人沮喪的簡單的問題:我需要編寫一個接受的形式輸入的程序:與定界符
cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
但我ARGS []總是空的,當我嘗試做任何事情與它在main()中。即使輸入cat << EOF | echo
,也不會在終端上產生任何輸出。我在這裏做錯了什麼?
你沒有提供任何參數的程序,所以當然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
謝謝你解釋 - 我從來沒有見過貓用過這種方式,但這正是我需要處理的。我遇到了困惑,因爲我認爲連接的heredoc會在'java MyProgram'調用後立即送入命令行,作爲命令行參數,而不是傳入標準輸入。 – stanimal
如果您需要它們作爲參數,只需將它們作爲參數提供。必須更簡單。或者使用'xargs',它使用'stdin'並將其用作別的參數。 –
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();
}
一些代碼可以幫助很多。 –
代碼不是問題 - 它只是訪問輸入。代碼如下: 'public static void main(String args []){ \t for(String line:args){ \t System.out.println(line); \t} } ' 這不輸出任何內容,因爲args []是一個空列表。 – stanimal