Эффективное извлечение последней строки большого текстового файла
При работе с большими текстовыми файлами эффективное извлечение последней строки имеет решающее значение. Произвольный доступ к большим файлам может занять много времени, что делает его непрактичным. Вместо этого рассмотрите следующие решения:
Верните последнюю непустую строку:
Приведенная ниже функция Tail быстро извлекает последнюю непустую строку файла без загрузки или обход всего файла. Он ищет конец файла и читает символы назад, пока не встретит разрыв строки, затем создает и возвращает последнюю строку.
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
Верните последние N строк:
Если вместо этого вам нужны последние N строк, используйте функцию Tail2. Он использует аналогичную технику, но подсчитывает разрывы строк, чтобы определить нужные строки, прежде чем реверсировать и создавать выходные данные.
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
Вызов и использование:
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Аспекты Unicode:
Реализация использует переворот символов для восстановления строк. Хотя в целом это эффективно, это может вызвать проблемы с обращением Юникода с такими символами, как диакритические знаки и шляпы. Поэтому перед использованием этого подхода на разных языках необходимо тщательное тестирование.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3