Обработка огромных файлов с разделителями каналов - PullRequest
0 голосов
/ 18 июля 2011

со ссылкой на мой предыдущий пост

Удалить первую строку из файла с разделителями

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

Кто-нибудь может предложить лучшую альтернативу этой проблеме.

Спасибо за продвижение.

Вивек

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Вы должны прочитать файл построчно и записать его на место:

BufferedReader reader = new BufferedReader(new FileReader("foo.txt"));
PrintWriter writer = new PrintWriter(new FileWriter("_foo.txt"));

String line;
boolean firstLine = true;

while ( (line = reader.readLine()) !=null) {
    if (!firstLine) {
        writer.println(line);
        firstLine = false;
    }
}
0 голосов
/ 18 июля 2011

Чтобы избежать перезаписи всего файла для удаления одной строки, вы можете поддерживать индекс для «начала» файла.Этот индекс - это место, откуда вы полагаете, что начинаете читать и откуда начинаете читать файл.Периодически, например, раз в ночь, вы можете перезаписывать файл так, чтобы этот «запуск» был тем местом, где файл фактически начинается.

Это «начальное» местоположение можно сохранить в другое время или в начале существующего файла.

Это означает, что вы можете постепенно «удалять» все строки файла, не перезаписывая его вообще.

...