2012-03-14 36 views
2

我有下面幾行代碼:如何解決沒有輸入StreamTokenizer極

public static void main(String[] args) { 
    InputStreamReader inputStreamReader = new InputStreamReader(System.in); 
    StreamTokenizer t = new StreamTokenizer(inputStreamReader); 
    while (t.nextToken() != StreamTolenizer.TT_EOF) { 
     // process here 
    } 
} 

所以,當我跑,我呼籲:java example.java < input.txt

但是,我不能處理的情況「不輸入文件「當我打電話:java example

它似乎永遠運行。

回答

1

如果您在示例命令行中沒有將任何內容重定向到stdin(System.in),例如「input.txt」,那麼您的程序會希望您將數據輸入到控制檯窗口中。

也許你應該重構程序以期望命令行參數(例如,通過檢查「args.length >= 1」)並將其解釋爲要讀取的文件的名稱。如果沒有給出文件名,那麼你可以打印一條錯誤消息。此外,您可以將特殊的僞文件名「-」(單個hypen)解釋爲stdin,因此您仍然可以重定向數據。

例如:

public static void main(String[] args) { 
    if (args.length < 1) throw new IllegalArgumentException("no filename given"); 
    InputStream in = ("-".equals(args[0])) ? System.in : new FileInputStream(args[0]); 
    InputStreamReader inputStreamReader = new InputStreamReader(in); 
    StreamTokenizer t = new StreamTokenizer(inputStreamReader); 
    while(t.nextToken() != StreamTolenizer.TT_EOF) { 
    // ... 

但是,不要忘記關閉的FileInputStream,例如在finally區塊中。