我不知道为什么我会收到 NoSuchElementException。我正在阅读的文件是 LF 终止的,这段代码已经在生产环境中运行了一年。在调试过程中,我的同事发现当文件以 LF 结尾并且长度正好为 1025 个字符时(尽管原始文件长度为 10132 个字符),您可以重现错误。这个错误在 Linux 和 Windows 上都可以重现,我尝试了 JDK 1.6.0_30、JRE 1.7 和 JDK 1.7.0_07。如果将 Pattern 更改为“~$?” 或“~\r?\n?” 错误消失了。
public static void main(String[] args) throws FileNotFoundException {
String filepath = "file.txt";
Scanner s = null;
try {
s = new Scanner(new File(filepath));
s.useDelimiter(Pattern.compile("~\n?", Pattern.UNIX_LINES));
while (s.hasNext()) {
System.out.println(s.next());
}
} finally {
if (s != null)
s.close();
}
}
任何建议表示赞赏。
谢谢!
编辑 1我刚刚尝试了Scanner
的 GNU Classpath 实现,并且该版本的 Scanner 工作得很好。