【发布时间】:2015-06-01 00:19:03
【问题描述】:
我有几个文件(实际上它们也是保存在 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 文件的注释部分)。就是下面这个字符。
¸
当我删除这个字符时,我可以正常读取文件。然而,这是不可接受的。即使包含该字符,我该怎么做才能读取文件?
【问题讨论】:
-
你想在这里做什么? builder.append(scanner.nextLine()).append("\n");??添加换行符为什么?看起来您正在添加另一个“换行符”。一个空行???
-
要明确这个字符是句号吗?还有你是如何检索文件的。
-
这是一个ASCII扩展字符(cedilla:U+00B8),应该没有问题;您应该(使用十六进制编辑器)检查前一个字节是什么;无论如何
Scanner scanner = new Scanner(file, "UTF-8") -
@ᴳᵁᴵᴰᴼ:也许如果您将其读取为 ascii,它会在 NULL 字符上出错?
-
我没有得到那个结果(我将 cedilla 复制到一个文本文件中并使用了与您所拥有的类似的代码,并且 hasNextLine 返回了 true)。我想知道文件格式之间是否存在分歧? IE。该文件是 UTF-8,但您告诉 Java 它是不同的,反之亦然)。