用Java中的BufferedReader重置缓冲区?

我正在使用BufferedReader类在缓冲区中逐行读取。 当读取缓冲区的最后一行时,我想再次从缓冲区的开始读取。 我已经阅读了mark()和reset(),我不确定它的用法,但我不认为他们可以帮我解决这个问题。

有没有人知道如何开始从缓冲区开始读取后到达最后一行? 像我们可以使用RandomAccessFile的seek(0)? 请。 谢谢

标记/重置是你想要的,但是你不能真的在BufferedReader上使用它,因为它只能重置一定数量的字节(缓冲区大小)。 如果你的文件比这个大,它将不起作用。 (不幸的是)没有“简单”的方法,但是处理起来并不难,你只需要一个原始FileInputStream的句柄。

 FileInputStream fIn = ...; BufferedReader bRead = new BufferedReader(new InputStreamReader(fIn)); // ... read through bRead ... // "reset" to beginning of file (discard old buffered reader) fIn.getChannel().position(0); bRead = new BufferedReader(new InputStreamReader(fIn)); 

(注意,不build议使用默认的字符集,只是使用一个简单的例子)。

是的,标记和重置是您将要使用的方法。

 // set the mark at the beginning of the buffer bufferedReader.mark(0); // read through the buffer here... // reset to the last mark; in this case, it's the beginning of the buffer bufferedReader.reset(); 

这对我来说解决了这个问题。 我正在逐行阅读文件。 我在我的程序中很早就做了一个BufferedReader。 然后检查readLine是否为null,然后执行myFile.close,然后执行新的BufferedReader。 第一次通过,readLinevariables将为空,因为我在全局设置它,然后还没有完成readLine。 该variables是全局定义的,并设置为空。 结果,一个紧密的和新的BufferedReader发生。 如果我在我的程序一开始就没有做一个BufferedReader,那么这个myFile.close会在第一遍时抛出一个NPE。

当文件逐行读取时,由于readLine不为空,所以此testing失败,testing中没有任何事情发生,文件parsing的其余部分继续。

稍后,当readLine获取到EOF时,它将被重新评估为null。 IE浏览器:通过这个检查的第二次通过也做了一个myFile.close和新的BufferedReader重新设置readLine重新开始。

实际上,在我的循环内部或循环外部,只有在readLinevariables全局设置为null或EOF的情况下才会执行此操作。 在任何一种情况下,我都会执行“重置”以恢复文件的开始和新的BufferedReader。

 if (readLineOutput == null) { //end of file reached or the variable was just set up as null readMyFile.close(); readMyFile = new BufferedReader(new FileReader("MyFile.txt")); }