Java 扫描仪 hasNextLine returns 错误
Java Scanner hasNextLine returns false
我有几个文件(实际上它们也是 java 保存在 Ubuntu 上的 Eclipse 中的源文件),我需要逐行读取和处理这些文件。我注意到我无法读取其中一个文件。我使用的代码如下
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine() ) {
builder.append(scanner.nextLine()).append("\n");
}
} catch (FileNotFoundException ex) {
System.out.println("Error");
}
我事先检查过文件是否存在。确实如此。我什至可以重命名它。但是我一行也看不懂。 hasNextLine 只是 returns false。 (我什至尝试 hasNext)。
最后我看了一下文件的内容,发现有一个不同的字符(在 java 文件的注释部分)。就是下面这个字符。
¸
当我删除这个字符后,我可以正常读取文件。然而,这是不可接受的。即使其中包含该字符,我该怎么做才能读取文件?
这很可能是字符集问题,因为您 运行 您的平台 java 代码默认使用不同的字符集; 始终 指定解析时要使用的 expected/needed 字符集是一个好习惯,对于扫描器 class 只需调用 constructor 为:
Scanner scanner = new Scanner(file, "UTF-8");
其中第二个参数是字符集字面量,甚至better:
Scanner scanner = new Scanner(file, StandardCharsets.UTF_8);
我有几个文件(实际上它们也是 java 保存在 Ubuntu 上的 Eclipse 中的源文件),我需要逐行读取和处理这些文件。我注意到我无法读取其中一个文件。我使用的代码如下
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine() ) {
builder.append(scanner.nextLine()).append("\n");
}
} catch (FileNotFoundException ex) {
System.out.println("Error");
}
我事先检查过文件是否存在。确实如此。我什至可以重命名它。但是我一行也看不懂。 hasNextLine 只是 returns false。 (我什至尝试 hasNext)。
最后我看了一下文件的内容,发现有一个不同的字符(在 java 文件的注释部分)。就是下面这个字符。
¸
当我删除这个字符后,我可以正常读取文件。然而,这是不可接受的。即使其中包含该字符,我该怎么做才能读取文件?
这很可能是字符集问题,因为您 运行 您的平台 java 代码默认使用不同的字符集; 始终 指定解析时要使用的 expected/needed 字符集是一个好习惯,对于扫描器 class 只需调用 constructor 为:
Scanner scanner = new Scanner(file, "UTF-8");
其中第二个参数是字符集字面量,甚至better:
Scanner scanner = new Scanner(file, StandardCharsets.UTF_8);