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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие файла и статические методы 
V
    Опции темы
Pavel_V
Дата 20.12.2008, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хочу сделать класс для удобства вывода отладочной информации и ведения лога.
Код


import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Log {
    /* Define debug mode
     * 0 - Debug is off
     * 1 - Console ouput
     * 2 - file outup
     * 3 - file and console
     */
    public final static byte mode = 3;
    private static PrintWriter pw = null;
    private static Date date = null;
    private static SimpleDateFormat fullDateFormat = new SimpleDateFormat("dd.MM.yyyy hh-mm");
    private static SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm:ss");
    public static void main(String args[]){
        out("test output");
        pw.close();
    }
    static{
        try {
            pw = new PrintWriter(new OutputStreamWriter(
                    new FileOutputStream("Log " + fullDateFormat.format(new Date()) + ".txt"), "Cp866"));
        } catch (Exception ex) {
            Logger.getLogger(Log.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static void out(String str){
        String now = timeFormat.format(new Date()) + "  ";
        if (mode == 1 || mode == 3){
            System.out.println(now + str);
        }
        if (mode == 2 || mode == 3){
            pw.println(now + str);
        }
    }
}



Я хочу что бы метод out был статическим,  т.к. я не хочу создавать обьект каждый раз когда мне понадобится вывесить что-то в лог. Для проверки класса добавлен метод main. Если не закрыть поток вывода, то в файл ничего не запишетя. Если бы я создавал обьект этого класса, то я мог бы для закрытия файла испльзовать finalize(), но создавать экземпляр где-то в программе явным образом я создавать не хочу, а без этого finalize не вызывается. Пробовал создать обьект этого класса тут же, в статическом блоке, но finalize все равно не вызывается (почему?).
Можно конечно после каждой записи в файл делать flush(), и вобще забить на закрытие файла (что я скорее всего и сделаю).
Можно все-таки создать экземпляр где-то в программе и использовать finalize().
В конце концов, просто стало очень интересно, есть ли еще какие-нибудь варианты решения этого вопроса? Подскажите пожалуйста.
PM MAIL   Вверх
powerOn
Дата 20.12.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



а чем вам стандартный логер неугодил? и Log4j почему бы еще не посмотреть?



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
_sten_
Дата 20.12.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Можеш сделать так:
Код


   Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            public void run() {
                pw.close();
            }
        }));



А вобще не надо придумывать велосипед. Используй уже существующие логеры
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
Pavel_V
Дата 20.12.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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