用java扫描仪读取文件的怪异行为
所以,我在使用Scanner类从文件中读取内容时遇到了一个有趣的问题。 基本上,我试图从目录中读取由解析应用程序生成的几个输出文件,以计算一些准确度度量。
基本上,我的代码只是遍历目录中的每个文件,并用扫描器打开它们以处理内容。 无论出于何种原因,扫描仪都没有读取一些文件(所有UTF-8编码)。 即使这些文件不是空的,scanner.hasNextLine()在第一次调用时会返回false(我打开调试器并观察它)。 我每次都直接用File对象初始化扫描器(成功创建文件对象)。 即:
File file = new File(pathName);
...
Scanner scanner = new Scanner(file);
我尝试了几件事情,最终通过以下方式初始化扫描器来解决此问题:
Scanner scanner = new Scanner(new FileInputStream(file));
虽然我很高兴解决了这个问题,但我仍然很好奇以前可能发生了什么问题。 有任何想法吗? 非常感谢!
根据Java 6u23中的Scanner.java源代码,检测到一条新行
private static final String LINE_SEPARATOR_PATTERN =
"rn|[nr???]";
private static final String LINE_PATTERN = ".*("+LINE_SEPARATOR_PATTERN+")|.+$";
因此,您可以检查是否可以将以下正则表达式匹配到未读取文件中的内容。
.*(rn|[nr???])|.+$
此外,我会检查是否有一些异常提出。
更新:这让我很好奇,我寻找答案。 似乎你的问题已经在这里被问及解决:Java扫描器(文件)行为异常,但扫描器(FIleInputStream)始终与相同的文件
总结一下,关于不在ASCII中的字符,其行为有所不同,具体取决于您是使用File还是FileInputStream初始化扫描仪。
我会试着检查你是否在阅读文件后总是关闭扫描仪。 你也只需要调用hasNextLine()和nextLine(),或者你在该扫描器上调用另一个nextXXX()方法?
链接地址: http://www.djcxy.com/p/67197.html上一篇: Weird behavior with java Scanner reading files
下一篇: oracle.dataAccess.dll getting an error when connecting via 12c Client