«Последние n строк» довольно сложно сделать с кодировками с потенциально переменной шириной и т. Д.
Я написал итератор обратной линии на C # в ответ на другой вопрос SO . Код весь там, хотя он использует блоки итераторов, которые недоступны в C # - вам, вероятно, будет лучше передать в метод желаемый размер и получить его для построения списка. (Затем вы можете преобразовать операторы yield return
в моем коде в вызовы list.add()
.) Конечно, вам нужно будет использовать Java Charset
вместо Encoding
, и их API тоже немного отличаются. Наконец, вам нужно будет перевернуть список, когда вы закончите.
Все это предполагает, что вы не хотите просто прочитать весь файл. Если вы не возражаете против этого, вы можете использовать циклический буфер, чтобы сохранить «последние n строк на данный момент», считывая до конца и возвращая буфер позже. Это было бы намного проще намного реализовать, но было бы намного менее эффективно для очень длинных файлов. Это легко сделать с помощью любого считывателя , вместо нескольких выбранных кодировок над потоком (что делает мой обратный итератор).