0

在下面编写的代码中,我希望第二个 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

4 回答 4

1

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

当然,只有在文件不太大的情况下才这样做,因为 BufferedReader 必须将所有内容都保存在内存中才能做到这一点。

于 2011-05-06T11:25:02.143 回答
0

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

于 2011-05-06T12:21:48.327 回答
0

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

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);
于 2011-05-06T11:24:37.843 回答
0

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

于 2011-05-06T11:25:07.953 回答