Java 如何在BufferedReader中读取和循环一个大文件时向后移动1000行

Java 如何在BufferedReader中读取和循环一个大文件时向后移动1000行,java,bufferedreader,Java,Bufferedreader,我正在用java中的BufferedReader读取并循环一个大文件。我想问,是否有一种方法,我可以移动1000线后面的循环?这是一个简单的CSV文件,我在每个循环中以字符串形式保存所有记录 BufferedReader br = new BufferedReader(new FileReader("D:\\file.txt")); String line; while ((line = br.readLine()) != null) { // normal processing

我正在用java中的
BufferedReader
读取并循环一个大文件。我想问,是否有一种方法,我可以移动1000线后面的循环?这是一个简单的CSV文件,我在每个循环中以字符串形式保存所有记录

BufferedReader br = new BufferedReader(new FileReader("D:\\file.txt"));
String line;
while ((line = br.readLine()) != null) {  
    // normal processing
    if (condition)
    // move 1000 lines back again in the loop above (i.e. re-read 1000 lines again)

}

有什么方法可以让我向后移动吗?

你可以使用
mark()
reset(),
只要缓冲区足够大,或者你可以在一个数据块中保留最近的1000行,但是为什么呢?重新读取文件只是设计不好的标志。大多数文件可以从左到右一次读取。编译器可以这样做:您也可以。

谢谢EJP,mark()接受intReadAhead参数,我不理解。如果我说1000,它就挂了。而且它也不会重置回正确的位置。参数就是它在Javadoc中所说的:在保留标记的同时,您希望能够读取的字符数。这不是一个行计数。“悬念”和其他的都很难让人相信。你确定没有例外吗?如果我不确定字符数怎么办?然后过度指定,但我重复一遍,你根本不应该这样做。一般来说,如果你在缓冲区级别获得访问权限,你可以重新读取以前的缓冲区,并向后数行。不过,您可能必须编写自己的BufferedReader替换程序才能获得缓冲区访问权。