Nur*_*mir 6 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");
}
Run Code Online (Sandbox Code Playgroud)
我事先检查了文件是否存在。确实如此。我什至可以重命名它。但我不能读一行。hasNextLine 只返回 false。(我什至尝试过 hasNext)。
最后我看了一下文件的内容,发现有一个不同的字符(在java文件的注释部分)。它是以下字符。
¸
Run Code Online (Sandbox Code Playgroud)
当我删除这个字符时,我可以正常读取文件。然而这是不可接受的。即使其中包含该字符,我该怎么做才能读取文件?
这很可能是字符集问题,因为您运行 Java 代码的平台默认使用不同的字符集;它总是指定预期/需要的字符集一个很好的做法解析时使用,并用扫描仪类只是一个调用的事构造函数为:
Scanner scanner = new Scanner(file, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
其中第二个参数是字符集文字,甚至更好:
Scanner scanner = new Scanner(file, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)