2010-03-30 2 views
1

Допустим, у меня есть 10 строк в файле. У меня есть 2 параметра, которые определяют начало и конец индекса.Чтение строк между начальным индексом и индексом конца в java

StartIndex = 2 // определяет первые 2 строки

ENDINDEX = 3 // определяет последние 3 строки

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

Благодаря

+0

Если каждая строка была точно такой же длины, вы можете искать непосредственно начальный индекс. –

ответ

0

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

File file = new File("myfile.txt"); 
List lines = FileUtils.readLines(file).subList(2,3); 

http://commons.apache.org/io/

0

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

Что касается конца, если ваш конечный индекс является индексом с начала файла, вы можете остановить его раньше. Но вы имели в виду третью строку с конца файла? В этом случае вам также придется прочитать весь путь до конца файла, чтобы знать, когда остановиться.

Один специальный случай, если вы знаете, что все линии имеют одинаковую длину. Затем вы можете напрямую искать нужное место в файле и начать читать.

+0

Я предполагаю, что я упомянул то же самое в сообщении, использую индекс для сканирования файлов ... – jagamot

0

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