如何使缓冲读取器从头开始读取而不是使用另一个对象

时间:2011-05-06 11:17:58

标签: java bufferedreader

在下面编写的代码中,我希望第二个while循环从第一个while循环使用的同一文件的第二行读取。截至目前,第二个while循环正在从文件的第三行读取。 我可以通过使用另一个缓冲读卡器来实现。但还有另一种更好的方法吗?

filename = data1
readFile = new File(filename);
BufferedReader reader = null;
try
{
    reader = new BufferedReader( new FileReader(readFile) );
}
catch (IOException ioe)
{
    System.err.println("Error: " + e.getMessage());     
}
String newline;
int secondRecord = 0;
while((secondRecord < 2) && ((newline = readline(reader)) != null))
    {
    System.out.println(newline);
            secondRecord ++;
    }

while ((newline = readline(reader)) != null)
    {
    System.out.println(newline);
    }

4 个答案:

答案 0 :(得分:1)

BufferedReader支持mark()reset()。因此,您应该在第一次循环之前调用mark(),然后在reset()之后调用它,然后它应该能够再次读取相同的行。

当然,只有当文件不是太大时才这样做,因为BufferedReader必须将所有内容保存在内存中才能执行此操作。

答案 1 :(得分:0)

我会将文件读入List并按照您的需要处理列表。

List<String> lines = FileUtils.readLines(readFile);
for(String line: lines.subList(0,2))
    System.out.println("first loop "+line);
for(String line: lines.subList(2, lines.size()))
    System.out.println("second loop "+line);

答案 2 :(得分:0)

您可以在稍后要返回的位置放置mark。 (假设您使用该文件不需要太大的预读缓冲区。)

答案 3 :(得分:0)

我应该使用do while循环而不是第二次循环。 这样它也会读取第二行。