Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод последних строк из текстового документа, Помогите пожалуйста 
V
    Опции темы
Rulevoj
  Дата 5.11.2010, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Прошу помощи... Я где-то видел но так и не смог найти... в интернете часов 5 искал так и не нашел.....




Мне надо из текстового докуманта log/talk.txt выдернуть последние 20 или 30 строчек,
(кол-во строк постоянно изменеяется т.к. докумен с переодичностью обновляется).

и вывести их так:

1
2
3
4
5


Если  их взяли наоборот т.е. :

5
4
3
2
1



ну тоесть последняя строчка должна становиться первой)))
Подскажите как сделать....
PM MAIL WWW ICQ Skype   Вверх
nc30
Дата 5.11.2010, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Код

package logreader;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;

public class LogReader {

    private static final String LOCAL_DIR_NAME = "log";
    private static final String DEST_FILE_NAME = "talk.txt";
    private static final int NUMBER_OF_ROWS = 20;

    public static void main(String[] args) {
        LogReader lr = new LogReader();
        // Вызываем основную процедуру примера, которая может выбросить исключения.
        try {
            lr.readFile();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    private void readFile() throws FileNotFoundException, IOException {
        // Создание указателя на исходный файл.
        File destFile = new File(LOCAL_DIR_NAME + File.separator + DEST_FILE_NAME);

        // Открываем символьное чтение из файла созданием объекта стандартного
        // файлового ридера.
        // "Прикрепляем" его к другому символьному ридеру, удобному
        // для последующей обработки считанной информации.
        // Самого чтения пока не происходит.
        BufferedReader br = new BufferedReader(new FileReader(destFile));

        // Организуем структуру для хранения полезной информации из файла.
        // Коллекция LinkedList удобна для нашей задачи, т. к. может
        // выступать в роли очереди, а также позволяет перебирать элементы
        // в обратном порядке.
        LinkedList<String> strings = new LinkedList<String>();

        // Пока считанная строка str не будет равна null - файл еще
        // не закончился: продолжаем чиать строку за строкой с помощью
        // метода readLine() и добавлять их в нашу коллекцию.
        String str = null;
        while ((str = br.readLine()) != null) {
            strings.add(str);

            // Следим за количеством сохраненных строк, при превышении
            // заданного параметра удаляем самую "старую".
            if (strings.size() > NUMBER_OF_ROWS) {
                strings.poll();
            }
        }

        // Пробегаемся по сохраненному списку в обратном порядке
        // и выводим значения строк.
        for (Iterator i = strings.descendingIterator(); i.hasNext();) {
            System.out.println(i.next());
        }
    }
}


Это сообщение отредактировал(а) nc30 - 5.11.2010, 08:16
PM MAIL   Вверх
Rulevoj
Дата 5.11.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Код

05.11.2010 04:16:00 - Р?зменён статус чата - 33 текст СЃС‚Р
°С‚СѓСЃР° -  Р”РѕСЂРѕРіРѕР№ Дедушка РњРѕСЂРѕР·, РЅР° Новый Год Рї
оложи РјРЅРµ РїРѕРґ елочку кусочек счастья... СЂРѕСЃС‚Р
ѕРј 185 СЃРј
05.11.2010 04:06:00 - Р?зменён статус чата - 5 текст ста
туса -  РќРµ знаю как насчет петь,РЅРѕ пить ты СѓРјРµ
ешь точно
05.11.2010 03:56:00 - Р?зменён статус чата - 9 текст ста
туса -  Р”СЂСѓР·СЊСЏ-это те люди СЃ которыми РјРѕР¶РЅРѕ РїР
»Р°РєР°С‚СЊ РѕС‚ радости потому что РјС‹ РґСЂСѓР¶РёРј.(РїРѕСЃРІС
ЏС‰Р°РµС‚СЃСЏ Р’РёРєРµ):*
05.11.2010 03:46:00 - Р?зменён статус чата - 6 текст ста
туса -  РѕРЅР° РЅРµ любит,РѕРЅР° лишь играет его чувсС
‚вами,РѕРЅР° поддается каждому его шагу вперед,
только для того,чтобы не сделать ему больно.
...
05.11.2010 03:36:00 - Р?зменён статус чата - 1 текст ста
туса -  С‚ебе матерный язык напомнить,иль сам
все знаешь?
05.11.2010 03:25:59 - Р?зменён статус чата - 2 текст ста
туса -  РЈСЃСЂРёСЃСЊ ты РІ этой ванне!!! *Любимый*
05.11.2010 03:15:59 - Р?зменён статус чата - 3 текст ста
туса -  РџРѕСЂР°Р·РёР»Рё так поразили!Парень был СѓРІРµС
ЂРµРЅ, что месячные Сѓ нас РёРґСѓС‚ РѕРґРёРЅ день(Р’РћРў БЫ!
), а один друг, что месяц(не дай Бог!)!Звездец,
грамотеи!
05.11.2010 03:05:59 - Меняем статус.


По времени видно что скрипт работает и это то что мне нужно)))


теперь мне результат, этот текст, вывести в переменную и прекодировать в utf-8.... как вывести не подскажете?
PM MAIL WWW ICQ Skype   Вверх
mgarin
Дата 5.11.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Что-то типа:
Код
        try
        {
            String text = "Some non-utf text";
            String utf8_text = new String ( text.getBytes (), "UTF-8" );
        }
        catch ( UnsupportedEncodingException e )
        {
            //
        }


Соответственно вместо "text" используете тот String что вы выводите в лог

Это сообщение отредактировал(а) mgarin - 5.11.2010, 15:50
PM MAIL WWW ICQ   Вверх
Rulevoj
  Дата 5.11.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Я не могу понять как присвоить результату

Код

        for (Iterator i = strings.descendingIterator(); i.hasNext();) {
            System.out.println(i.next());
        }
 

этого кода переменную а как в utf-8 я нашел бы код....

у меня всё стопорится.... 
PM MAIL WWW ICQ Skype   Вверх
nc30
Дата 5.11.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Лучше сразу записывать перекодированные строки в коллекцию:
Код

        //...
        while ((str = br.readLine()) != null) {
            String utf8Str = new String(str.getBytes(), "UTF-8");
            strings.add(utf8Str);
            // или одной строкой: strings.add(new String(str.getBytes(), "UTF-8"));
            //...

Если делать это не при создании коллекции, а при ее печати, тогда можно так:
Код

        //...
        for (Iterator i = strings.descendingIterator(); i.hasNext();) {
            String utf8Str = new String(((String) i.next()).getBytes(), "UTF-8");
            System.out.println(utf8Str);
        }
        //...

Т. к. метод i.next() возвращает объект типа Object, нам приходится делать явное приведение типа Object к типу String (кастить).

Я бы выбрал первый вариант: с исправленной коллекцией что-то можно еще сделать, плюс к тому, код выглядит читабельнее.

Это сообщение отредактировал(а) nc30 - 5.11.2010, 19:55
PM MAIL   Вверх
Rulevoj
Дата 6.11.2010, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Код

for (Iterator i = strings.descendingIterator(); i.hasNext();) { 
String utf8Str = new String(((String) i.next() + "<br/>").getBytes(), "UTF-8");
con.print(utf8Str);  }


сделал так дабы строчки в html  отличались.... иначе весь текст будет идти одной строчкой.... 


Всем спасибо.... 

ещё можно использовать 

Код

for (Iterator i = strings.descendingIterator(); i.hasNext();) { 
String utf8Str = new String(((String) i.next() + "/n").getBytes(), "UTF-8");
con.print(utf8Str);  }

PM MAIL WWW ICQ Skype   Вверх
nc30
Дата 6.11.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Rulevoj, я рад что вам удалось во всем разобраться  smile 
PM MAIL   Вверх
Temdegon
Дата 6.11.2010, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



А как бы сделать так, что бы не читать весь файл построчно? Т.е. читать N строк с конца файла, задом наперед. Это бы сильно ускорило работу с большими файлами.
PM MAIL   Вверх
Rulevoj
Дата 6.11.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Тема решена)))
PM MAIL WWW ICQ Skype   Вверх
Rulevoj
Дата 6.11.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Идея хорошая... мне кажется это не возможно....
PM MAIL WWW ICQ Skype   Вверх
Skipy
Дата 8.11.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



Цитата(Rulevoj @ 6.11.2010,  18:16)
Идея хорошая... мне кажется это не возможно....

Возможно всё. Вопрос в затратах. На основе RandomAccessFile и InputStream все делается прекрасно. И быстро, кстати.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Rulevoj
Дата 12.11.2010, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.11.2010
Где: Липецк

Репутация: нет
Всего: нет



Вообщем маней нет...  работает ну и хорошо))) Спасибо!!! Может быть я вернусь к этой теме....
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.