Хвост -n 1000 на Java (Apache Commons и т. Д.) - PullRequest
4 голосов
/ 02 июня 2009

Мне интересно, существует ли уже код утилит для реализации некоторого / всего хвоста * NIX. Я хотел бы скопировать последние n строк одного файла / программы чтения в другой файл / программу чтения и т. Д.

Ответы [ 4 ]

1 голос
/ 02 июня 2009

Вы можете взглянуть на реализацию tail в одном из Heritrix служебных классов. Я не писал его, но написал код, который его использует, насколько я могу судить, работает правильно.

1 голос
/ 02 июня 2009

Это похоже на хорошую ставку: Tailer Library . Эта реализация основана на нем, но не то же самое. Никто не реализует возврат, чтобы получить последние 100 строк. (

0 голосов
/ 02 июня 2009

«Последние n строк» ​​довольно сложно сделать с кодировками с потенциально переменной шириной и т. Д.

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

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

0 голосов
/ 02 июня 2009

Это приложение с пользовательским интерфейсом - хотя вы можете посмотреть на источник, чтобы увидеть, что оно делает (в основном, некоторые потоки и ввод-вывод). Следуйте .

...