我想要做的是,当我使用初始化bufferedReader
时,我曾使用readLine()
从文件中读取行,当我到达文件末尾时我想使用相同的bufferedReader
对象以读取同一文件的beginnig中的行为例。
我尝试实现此问题的原因是,在初始化mark()
我设置reset()
之后,我使用了bufferedReader
和bufferReaderobject.mark(0)
,然后我读了整个文件,之后我使用bufferReaderobject.reset()
并且agian读取整个文件,但随后抛出异常。似乎reset()
仅在文件末尾未到达时才有效。
有没有办法将以前初始化的bufferedReader
重置为流的beginnig?
答案 0 :(得分:2)
为了能够以这种方式使用reset()
,整个文件必须适合BufferedReader
的缓冲区。
这意味着您必须使用足够大的缓冲区创建BufferedReader
,或者在想要再次读取文件时创建新实例。
答案 1 :(得分:2)
试试这个:
FileInputStream fIn = ...;
BufferedReader bRead = new BufferedReader(new InputStreamReader(fIn));
// "reset" to beginning of file (discard old buffered reader)
fIn.getChannel().position(0);
bRead = new BufferedReader(new InputStreamReader(fIn));
答案 2 :(得分:0)
mark method的BufferedReader文档调用参数readAheadLimit
并声明
尝试在读取此限制或更高的字符后重置流可能会失败。
所以似乎标记只能向前工作,并且不能用于重置到开始。
另请查看此question。