2011-07-13 67 views
2

Java命令行輸入我有一個令人沮喪的簡單的問題:我需要編寫一個接受的形式輸入的程序:與定界符

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

但我ARGS []總是空的,當我嘗試做任何事情與它在main()中。即使輸入cat << EOF | echo,也不會在終端上產生任何輸出。我在這裏做錯了什麼?

+0

一些代碼可以幫助很多。 –

+0

代碼不是問題 - 它只是訪問輸入。代碼如下: 'public static void main(String args []){ \t for(String line:args){ \t System.out.println(line); \t} } ' 這不輸出任何內容,因爲args []是一個空列表。 – stanimal

回答

2

你沒有提供任何參數的程序,所以當然args[]是空的。

您可以從System.in讀取heredoc。

您似乎對參數(args[])和stdinSystem.in)之間的差異感到困惑。

echo寫入其參數args[])至stdout,例如:

$ echo foo bar 
foo bar 

cat寫入其stdinSystem.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 
+0

謝謝你解釋 - 我從來沒有見過貓用過這種方式,但這正是我需要處理的。我遇到了困惑,因爲我認爲連接的heredoc會在'java MyProgram'調用後立即送入命令行,作爲命令行參數,而不是傳入標準輸入。 – stanimal

+0

如果您需要它們作爲參數,只需將它們作爲參數提供。必須更簡單。或者使用'xargs',它使用'stdin'並將其用作別的參數。 –

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(); 
} 
+0

我知道如何使用所有這些 - 我正在編寫的程序需要以此格式輸入,因爲它將使用自動數據輸入進行評估。 – stanimal

+0

所以試試吧...... –

+0

啊,我明白了;就像我下面所說的那樣,這個問題是不知道我的程序如何訪問heredoc的結果。 – stanimal