Как я могу перейти к конкретной строке и читать из этого в Java - PullRequest
0 голосов
/ 08 августа 2011

Я встречаю большой файл (много ГБ) и хочу перейти непосредственно к определенной строке, а затем прочитать какую-нибудь строку из этого ...

например, я хава файл как

1.aaaaaaaaaaaa
2.bbbbbbbbbbbb
3.cccccccccccc
4.dddddddddddd

и хотите прочитать строки из 3 и 4. теперь не использует readLine () для обработки строки 1 .... 2, а начинает свой путь с 3 и читает 2 строки.

как я могу сделать это в Java? .... потому что я не хочу оставлять много объектов в памяти ...

спасибо тебе!

Ответы [ 4 ]

1 голос
/ 08 августа 2011

Вам не нужно хранить значение, возвращаемое readLine() при каждом вызове, просто проверьте, начинается ли оно с того значения, которое вы хотите. Если это так, то вы можете сохранить нужные вам строки.

1 голос
/ 08 августа 2011

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

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

Еще один хороший вариант для огромного объема данных - это база данных ...

С уважением, Stéphane

1 голос
/ 08 августа 2011

Новая строка в файле - это просто символ. То же самое в Java, C и любом другом языке, вам придется использовать readLine() или аналогичный метод для подсчета строк. Даже если есть библиотека, которая сделает это за вас, ей все равно придется идти символ за символом, чтобы подсчитать количество строк.

0 голосов
/ 08 августа 2011

Не используйте readline(), так как это выделит бесполезные String. Наберите read() на BufferedReader, считая номер '\n', пока не пропустите нужное количество линий.

Редактировать

Возможно, вам также придется посчитать `\r' и '\r', сразу после которых следует '\n', чтобы сделать то же самое, что и readline(). Возможно, у вас возникла небольшая проблема при чтении последнего '\r', поскольку вы не можете знать, сопровождается ли оно '\n' или нет. Чтобы разобраться с этим случаем, я прочитаю следующий символ, и если это не '\n', я бы использовал его перед первой важной строкой.

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

...