2010-11-30 112 views
-3

我正在用Scanner + System.in讀取文件。我在Linux命令的樣子:Scanner + System.in停止條件

cat -A test.txt | java -jar test.jar 

我讀像輸入:

Scanner input = new Scanner(System.in); 

    while (input.hasNextLine()) 
    { 
     String log_line = input.nextLine(); 
    } 

的問題是。如何到達文件結尾時,我可以不要讀?

+0

不知道這可以被標記爲一個問題的副本,在問題發佈四年後問了這個問題。 – 2017-07-06 19:54:36

+1

@MeghanArmes當投票結束時,時間無關緊要。我們更喜歡更好的職位成爲目標。 – 2017-07-06 20:03:23

+0

@Jarrod總結一個問題,因爲重複的封閉式問題不是一個好主意。它阻止任何方式獲得新的答案。請重新打開。 – 2017-07-06 20:03:28

回答

2

看來,問題是-A選擇,而不是您的Java代碼(它工作正常的純文本文件):

$ echo -e "foo\nbar" | java -jar Test.jar 
foo 
bar 
$ 

也許test.txt的包含一些非打印字符是掃描器無法處理...

3

問題是System.in永遠不會「結束」,即EOF永遠不會發送到流,因此hasNextLine()在最後一行後阻止等待更多數據。

解決方法是將文件名傳遞給您的應用程序,然後打開FileInputStream(filePath)並將其用於Scanner構造函數中。