2010-11-26 2 views
2

Я искал SO, чтобы узнать, есть ли у вас вопрос об этом, но, по-видимому, это не так. В настоящее время я читаю текстовый файл с использованием BufferedReader. Моя единственная проблема в том, что я хочу прочитать последнюю строку моего файла ТОЛЬКО. IE: Я пишу что-то в файл 10 раз, я хочу получить 10-ю запись. Я мог бы просто запустить цикл, читающий каждую строку, пока не попаду на мою 10-ю строку, но мне было интересно, был ли более эффективный способ, так как файл будет продолжать увеличиваться и может в итоге стать более 100 записей.Как эффективно добираться до конца текстового файла в Java?

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

Спасибо!

+2

Не оптимизируйте свой код, прежде чем вы доказали, что это узкое место. Сделайте это, опираясь на то, как вы можете это сделать, и посмотрите, насколько хорошо он работает. – oherrala 2010-11-26 20:30:42

ответ

4

Чтение 100 строк вряд ли будет проблемой.

Это является можно прочитать текстовый файл в обратном направлении, но:

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

Если вы хотите увидеть, как это ужасно, у меня есть некоторый код в этом Stack Overflow question - это в C#, но вы должны быть в состоянии понять это достаточно легко. Надеюсь, этого достаточно, чтобы убедить вас не делать этого.

Если у вас есть файл со 100 000 строк, он может стоить того ... но 100? Ни за что. Просто прочитайте весь файл.

+0

Самая большая задержка при чтении файла - получение диска. Для файла менее 4K нет разницы в это время. Для файлов размером менее 64 КБ вы не заметите разницы. – 2010-11-26 21:02:44

0

Единственный способ сделать это - если вы уже знаете длину файла, который, по-видимому, нет. Вам просто придется перебирать его. 100+ строк не должны занимать больше времени, чтобы перевернуть более 10 строк. Теперь, если у вас было миллион строк, вы, вероятно, захотите перейти в базу данных или что-то подобное.

0

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

3

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

+1

Хотя это не отвечает на вопрос, я просто не могу согласиться больше, поэтому это заслуживает голосования. – BalusC 2010-11-26 20:42:05

Смежные вопросы