【发布时间】:2011-05-04 14:49:12
【问题描述】:
BufferedReader 具有简单的方法来逐行读取文件。但是似乎没有任何方法可以跟踪您所在的位置,因此您可以稍后再回到那个地方。 FileInputStream 有文件 getChannel() ,它返回一个 FileChannel ,它可以告诉你流中的当前位置。因此,如果你给 BufferedReader 一个 FileInputStream 来读取,你可以在 FileInputStream 中找出 BufferedReader 停止读取的位置,并且你也可以在将 FileInputStream 给到缓冲阅读器之前将它设置到那个位置。
问题在于 BufferedReader 已提前读取文件。所以FileInputStream的位置和BufferedReader中的位置是不一样的。您可能从 BufferedReader 中读取了 20 行,但 BufferedReader 可能从 FileInputStream 中读取了 30 行。如果稍后您根据 FileInputStream 中的位置重新打开文件,您将错过中间的 10 行。
我可以从 InputStream 中逐个字符地阅读,但似乎有更好的方法...
【问题讨论】:
-
RandomAccessFile 怎么样? download.oracle.com/javase/1.4.2/docs/api/java/io/…
-
为什么中间需要关闭文件?