我怎样才能跳转到特定的行并从java中读取

时间:2011-08-08 17:02:35

标签: java file nio

我遇到一个大文件(很多GB),我想直接跳到特定的行,然后从那里读取一些行...

例如,我hava文件就像

1.aaaaaaaaaaaa
2.bbbbbbbbbbbb
3.cccccccccccc
4.dddddddddddd

并想要读取3和4中的行。 现在不使用'readLine()'来处理1 .... 2行,但是在3点开始我的行程并且读取2行。

我怎么能在java中这样做? ....因为我不想让更多的物品留在记忆中......

谢谢你!

4 个答案:

答案 0 :(得分:1)

文件中的新行只是一个字符。在Java,C和任何其他语言中都是一样的,你必须使用readLine()或类似的方法来计算行数。即使有一个库可以为你做,它仍然需要通过字符串char来计算行数。

答案 1 :(得分:1)

您不必在每次调用时存储readLine()返回的值,只需检查它是否以您想要的值开头。如果是,则可以存储所需的行。

答案 2 :(得分:1)

如果您知道要跳转的偏移量(而不仅仅是行号),则可以使用RandomAccessFile和skip方法。在你的情况下,如果你的线条实际上都是等于的,你可以计算偏移和跳跃。

否则,如果您只是根据行号进行跳转,则必须使用BufferedReader或使用FilterReader逐行读取所有文件,或者通过缓冲大量的字符选项并自行计数,无论您是想要,并开始只考虑你想要的数据部分。

大量数据的另一个好选择是数据库......

此致  斯特凡

答案 3 :(得分:0)

请勿使用readline()因为它会分配无用的String。在read()上拨打BufferedReader,计算'\n'的数量,直到您跳过所需的行数。

修改

您可能还需要计算`\r''\r',然后紧跟'\n',与readline()完全相同。当您阅读上一个'\r'时,您可能会遇到一个小问题,因为您无法知道它是否后跟'\n'。为了处理这种情况,我会读取下一个字符,如果它不是'\n',我会在第一个重要行前面使用它。

另一种解决方案,如果您的行具有固定大小,如示例所示,以计算要跳过的字符数并使用BufferedReader.skip()方法。