Чтение группы строк в огромных файлах - PullRequest
0 голосов
/ 18 августа 2011

Я понятия не имею, как сделать следующее: я хочу обработать действительно огромный текстовый файл (почти 5 гигабайт).Поскольку я не могу скопировать файл во временную память, я подумал о том, чтобы прочитать первые 500 строк (или столько, сколько уместилось в памяти, я еще не уверен в этом), что-то сделать с ними, затем перейти к следующим 500 доЯ закончил со всем файлом.

Не могли бы вы опубликовать пример "цикла" или команды, которая вам нужна для этого?Потому что все способы, которые я попробовал, привели к тому, что я начал сначала, но я хочу продолжить после завершения предыдущих 500 строк.

Помощь оценена.

Ответы [ 2 ]

1 голос
/ 18 августа 2011
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
ArrayList<String> allLines = new ArrayList<String>();

while((line = br.readLine()) != null) {
     allLines.add(line);
     if (allLines.size() > 500) {
          processLines(allLines);
          allLines.clear();
     }
}

processLines(allLines);
0 голосов
/ 18 августа 2011

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

BufferedReader br = new BufferedReader(new FileReader(file));
String lineRead = null;
FileWriter fw = new FileWriter(new File("newfile.txt"), false);

while((lineRead = br.readLine()) != null)
{
     if (true) // put your test conditions here
     {
         fw.write(lineRead);
         fw.flush();
     }
}
fw.close();
br.close();
...