我正在使用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();
}
问题是..如何在文件结束时停止阅读?
答案 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无法处理的不可打印的字符......