BufferedReader读取文件以后,怎么将文件指针移到文件开头

代码附上:
public class BufferedTest {
public static void main(String[] args) throws IOException
{
BufferedReader bReader = new BufferedReader(
new InputStreamReader(new FileInputStream("countBrowser/part-r-00000")));

    String msg = null;
    while((msg = bReader.readLine()) != null)
    {
        System.out.println(msg);
    }


    while((msg = bReader.readLine()) != null)
    {
        System.out.println(msg);
    }
}

}
文件的内容只是显示了一次,应该是使用bReader读完以后,文件指针移到了文件的末尾,再读取就读取不出来了,但是怎么移到文件的开头呢?求教大家了

4个回答

用mark和reset的话,也可以重新回到文件首部。mark是在当前位置标记一下,然后reset回到最后一次标记的位置。那么缓存区的内容就可以重复使用了。
示例代码:

 try {
            File file = new File("D:/Test.java");
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String content=reader.readLine();
            reader.mark((int)file.length());
            while(content!=null){
                System.out.println(content);
                content=reader.readLine();
            }

            reader.reset();
            content=reader.readLine();
            while(content!=null){
                System.out.println(content);
                content=reader.readLine();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
qq_46056214
qq_46056214 length那里要+1
3 个月之前 回复
u010317193
u010317193 Exception in thread "main" java.io.IOException: Mark invalid at java.io.BufferedReader.reset(Unknown Source) at cn.edu.nuc.test.BufferedTest.main(BufferedTest.java:27)
5 年多之前 回复
u010317193
u010317193 我试了试 ,出现了一个Mark invalid错误
5 年多之前 回复

reader.mark((int)file.length()); 这个参数有限制,还是用文件长度保险些。。。

让bReader重新执行文件。就是再执行一遍。

 bReader = new BufferedReader(
new InputStreamReader(new FileInputStream("countBrowser/part-r-00000")));
u010317193
u010317193 回复毕小宝: 我也是,mark和reset不好用,有异常
5 年多之前 回复
wojiushiwo945you
毕小宝 回复u010317193: 但是我测试了,不知道reset怎么用,就是回不到文件头部,还需要研究研究。重建对象简单一点。
5 年多之前 回复
wojiushiwo945you
毕小宝 回复u010317193: 是的。不好意思我错了,这个方法太笨了。我查了下API还有个reset()方法,用这个就能重新回到文件头部了。祝好!
5 年多之前 回复
u010317193
u010317193 这是重新建立了一个BufferedReader对象吗?
5 年多之前 回复

reader.mark((int)file.length()); 这个参数有限制,还是用文件长度保险些。。。
mark()的这个参数,我猜应该是这样的吧,例如:
file总共有10行,然后mark(3);
再reset();
然后读取到的应该是从**文件的开头到第三行**

u011267316
csdnxaizai 并不是。readAheadLimit Limit on the number of characters that may be read while still preserving the mark。这个参数是用来限制标记的最大有效长度的。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐