我遇到一个大文件(很多GB),我想直接跳到特定的行,然后从那里读取一些行...
例如,我hava文件就像
1.aaaaaaaaaaaa
2.bbbbbbbbbbbb
3.cccccccccccc
4.dddddddddddd
并想要读取3和4中的行。 现在不使用'readLine()'来处理1 .... 2行,但是在3点开始我的行程并且读取2行。
我怎么能在java中这样做? ....因为我不想让更多的物品留在记忆中......
谢谢你!答案 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()
方法。