как заставить буферизованный читатель читать с самого начала вместо использования другого объекта - PullRequest
0 голосов
/ 06 мая 2011

В приведенном ниже коде я хочу, чтобы второй цикл 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 ]

1 голос
/ 06 мая 2011

BufferedReader поддерживает mark() и reset().Таким образом, вы должны вызвать mark() перед вашим первым циклом и reset() после него, и тогда он сможет снова прочитать те же строки.

Конечно, делать это, только если файл не слишкомбольшой, так как BufferedReader должен хранить все в памяти, чтобы сделать это.

0 голосов
/ 06 мая 2011

Я должен был использовать цикл do while вместо второго while.Таким образом, он будет читать и вторую строку.

0 голосов
/ 06 мая 2011

Вы можете поставить отметку в том месте, куда вы хотите вернуться позже.(Предполагается, что использование файла не потребует слишком большого буфера для чтения.)

0 голосов
/ 06 мая 2011

Я бы прочитал файл в список и обработал бы список, как вы хотите.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...