@JudgeJohn 的回答很好——我会发表评论,但不幸的是我不能。逐行阅读将确保任何系统细节(如换行符的实现)都由 Java 的各种库处理,它们知道如何很好地做到这一点。在文件上使用Scanner
某种阅读器将允许轻松枚举行。在此之后,逐字符读取获得String
的字符应该没有问题,例如使用toCharArray()
方法。
一个重要的补充——当使用Stream
和Reader
对象时Scanner
,你的代码很好地处理进程的结束通常很重要——处理文件句柄等系统资源。这是在 Java 中使用close()
这些类的方法完成的。现在,如果我们完成阅读并调用close()
,一切都按计划进行,但可能会抛出异常,导致方法在close()
调用方法之前退出。一个好的解决方案是一个try - catch
或try - finally
块。例如
Scanner scanner = null;
try {
scanner = new Scanner(myFileStream);
//use scanner to read through file
scanner.close();
} catch (IOException e) {
if (scanner != null) scanner.close(); //check for null in case scanner never got initialised.
}
更好的是
Scanner scanner = null;
try {
scanner = new Scanner(myFileStream);
//use scanner to read through file
} finally {
if (scanner != null) scanner.close(); //check for null in case scanner never got initialised.
}
finally
无论块如何try
退出,该块总是被调用。更好的是,Java 中有一个try-with-resources块,如下所示:
try (Scanner scanner = new Scanner(myFileStream)) {
//use scanner to read through file
}
这个执行所有检查空值finally
和调用close()
. 非常安全,打字很快!