如何使用Java在两个方向上读取一个非常大的文本文件的n行块

时间:2010-03-05 11:36:48

标签: java file

我需要阅读一个非常大的日志文件(大约400MB)并在textarea中显示其内容。

显然我不能首先阅读整个文件,因为它的维度,所以我正在寻找一种方法,可以读取前n行(或部分字节)然后,当被问到时,开始阅读下一个n线等等。该方法需要在两个方向上工作:即如果显示从1000到1500的行并且用户想要回读,我必须显示从500到1000的行。

我正在尝试使用RandomAccessFileLineIterator和经典BufferedReader方法,但这些似乎不是很好的解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果您的文件没有严格的结构(即Martijn注意到的每行或每个逻辑块的固定字符数),那么您就无法使用RandomAccessFile优势。

在这种情况下,您可以尝试将大文件拆分为较小的文件,每个文件中的行数固定(例如1000)。在这种情况下,当用户想要查看从1800到2100的行时,您只需要读取2个文件(如果您说总大小约为400 Mb,则可能只有几千个文件)。

如果你不能这样做,你唯一能做的就是使用NIO来提高性能至少一点。

答案 1 :(得分:1)

在类似的情况下,其他人建议将文件存储在数据库中。例如,每行作为单独的记录。然后,在任何方向和大小块中读取数据都会容易得多。