2011-10-05 99 views
2

我寫一個程序,它有一個行動,如果在命令行中包含流重定向,如><,但需要另一個動作,否則。如何判斷命令行參數包含流重定向

我的第一反應是循環通過命令行,並檢查是否每個參數等於重定向符號,就像這樣:

public boolean hasRedirection(String[] args){ 
    boolean flag = false; 
    int length = args.length; 
    int i; 
    for(i = 0; i < length; i++){ 
     System.out.println(args[i]); 
     if(args[i].equals(">") || args[i].equals("<")) 
      flag = true; 
    } 
    return flag; 
} 

然而,它始終返回false。 System.out.println(args[i]);行顯示任何重定向和後續文件名都未被識別。例如:

project\src>java myProgram.Client localhost 1234 > myFile.txt 
localhost 
1234 

而它應該是:

project\src>java myProgram.Client localhost 1234 > myFile.txt 
localhost 
1234 
> 
myFile.txt 

是否有一個更簡單的方法,我可以做到這一點?謝謝你的時間!

+0

重定向是否由外殼提供了一個機制,所以我假設那些從參數剝離出來他們傳遞給你的'main'之前。 –

回答

5

重定向是shell的語法,不是一起傳遞給程序的一部分。請檢查System.console()是否返回非空值。

+0

這很好,謝謝! –

+4

順便說一句,要小心改變程序的行爲基於這樣的事情。當輸出不是控制檯時,可以省略顏色代碼,但除此之外 - 請注意這一點。人們會認爲簡單的重定向不會改變程序的行爲。 –

3

重定向機制的整點是,該方案不必在意。如果您需要做一些不同的事情,請添加一個命令行參數。

+0

+1 - 這是處理這個問題的正確方法。其他想法是具有兩個不同命令名稱或shell級別命令別名的命令。 –