Java Scanner hasNextLine返回false

时间:2015-06-01 00:19:04

标签: java java.util.scanner

我有几个文件(实际上它们也是在Ubuntu上保存在Eclipse中的java源文件),我需要逐行阅读和处理。我注意到我无法读取其中一个文件。我使用的代码如下

try (Scanner scanner = new Scanner(file)) {
    while (scanner.hasNextLine() ) {
        builder.append(scanner.nextLine()).append("\n");
    }
} catch (FileNotFoundException ex) {
    System.out.println("Error");
}

我正在检查文件是否存在。确实如此。我甚至可以重命名它。但我不能读一行。 hasNextLine只返回false。 (我甚至尝试hasNext)。

最后,我看一下文件的内容,发现有一个不同的外观字符(在java文件的评论部分)。它是以下字符。

¸

当我删除这个字符时,我可以正常读取该文件。但这是不可接受的。如果文件中包含该字符,我该怎么做?

1 个答案:

答案 0 :(得分:3)

这很可能是一个字符集问题,因为您运行Java代码的平台默认使用不同的集合; 总是是一种很好的做法,可以指定解析时要使用的预期/需要的字符集,而使用Scanner类只需将constructor称为:

Scanner scanner = new Scanner(file, "UTF-8");

其中第二个参数是字符集文字,甚至是better

Scanner scanner = new Scanner(file, StandardCharsets.UTF_8);