Java Scanner读取文件的奇怪行为
因此,我在使用Scanner类从文件中读取内容时遇到了一个有趣的问题.基本上,我正在尝试从目录中读取解析应用程序生成的几个输出文件,以计算一些准确度指标.
基本上,我的代码只是遍历目录中的每个文件,并使用扫描程序打开它们来处理内容.无论出于何种原因,扫描仪都没有读取一些文件(所有UTF-8编码).即使文件不为空,scan.hasNextLine()在第一次调用时也会返回false(我打开调试器并观察它).我每次都使用File对象直接初始化扫描程序(文件Objects已成功创建).即: 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???])|.+$ 我还会检查是否有异常. 更新: 总结它是关于ASCII之外的字符,根据您是使用File还是FileInputStream初始化Scanner,它们的行为会有所不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |