2010-11-30 81 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构造函数中。