扫描仪+ System.in停止条件

时间:2010-11-30 15:33:09

标签: java file-io java.util.scanner system.in

我正在使用Scanner + System.in读取文件。我在Linux中的命令如下:

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

我正在阅读输入:

Scanner input = new Scanner(System.in);

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

问题是..如何在文件结束时停止阅读?

2 个答案:

答案 0 :(得分:3)

问题是System.in永远不会“结束”,即EOF永远不会发送到流,因此在最后一行之后hasNextLine()阻止等待更多数据。

解决方案是将文件名传递给您的应用,而不是打开FileInputStream(filePath)并在Scanner构造函数中使用它。

答案 1 :(得分:2)

似乎问题是 -A 选项,而不是你的java代码(它在普通文件上正常工作):

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

也许test.txt包含一些Scanner无法处理的不可打印的字符......