如何连续读取文件?

时间:2015-01-09 09:59:32

标签: java file bufferedreader

我想连续读取文件,我的意思是如果我找到了文件的结尾,我想先从中再次阅读。所以我正在重置流,但它无法正常工作。这是我的代码。

 br = new BufferedReader(new FileReader("E:\\Abc.txt"));
        while(true)
        {

            sCurrentLine = br.readLine();
            if(sCurrentLine!=null)
                System.out.println(sCurrentLine);
            else
                br.reset();

        } 

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:2)

br = new BufferedReader(new FileReader("E:\\Abc.txt"));
while(true) {
     sCurrentLine = br.readLine();
     if(sCurrentLine!=null) {
          System.out.println(sCurrentLine);
     } else {
          br.close();
          br = new BufferedReader(new FileReader("E:\\Abc.txt"));
     }
}

因此它将使用新的BufferedReader重新启动:)

答案 1 :(得分:1)

您最好的选择可能是在BufferedReader返回readLine()时重新创建null

例如:

String filename = "[filename]";
BufferedReader reader = new BufferedReader(new FileReader(filename));

while (true) {
    String line = reader.readLine();
    if (line != null)
        // Use line
    else {
        reader.close();
        reader = new BufferedReader(new FileReader(filename));
    }
}

这样做的好处是可以直接从文件中直接读取,而不会一次在内存中存储太多内容,如果如你所说的那样,它可能是一个问题,它包含五千行。

答案 2 :(得分:0)

初始化br.mark(100);

后添加br
Marks the present position in the stream. Subsequent calls to reset()
will attempt to reposition the stream to this point.

参数readAheadLimit

  

readAheadLimit限制可读取的字符数   同时仍保留着商标。尝试重置流后   读取此限制或更高的字符可能会失败。限制值   大于输入缓冲区的大小将导致新的缓冲区   分配的大小不小于限制。因此价值很大   应小心使用。

以下代码将连续打印文件/home/user/temp/reader.test

的内容
    BufferedReader br = new BufferedReader(new FileReader("/home/user/temp/reader.test"));
    String sCurrentLine;

    br.mark(100);
    while(true)
    {
        sCurrentLine = br.readLine();
        if(sCurrentLine!=null)
            System.out.println(sCurrentLine);
        else
            br.reset();
    }