Как написать стандартный вывод с использованием BufferedWriter
В настоящее время я пишу приложение, которое создает несколько файлов журнала, используя BufferedWriter. Однако при отладке я хочу записать в System.out вместо файла. Я решил, что могу изменить:
log = new BufferedWriter(new FileWriter(tokenizerLog));
в
BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
log.write("Log output\n");
в отличие от:
System.out.println("log output")
Новый параметр OutputStreamWriter
не работает. Как изменить только объект внутри конструктора BufferedWriter для перенаправления из файла на стандартный. Поскольку у меня есть несколько файлов журналов, которые я буду писать, используя System.out всюду, и изменение вывода в файл на самом деле не является вариантом.
Ответы
Ответ 1
Ваш подход работает, вы просто забываете очистить вывод:
try {
BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
log.write("This will be printed on stdout!\n");
log.flush();
}
catch (Exception e) {
e.printStackTrace();
}
Оба OutputStreamWriter
и PrintWriter
являются экземплярами Writer
, поэтому вы можете просто сделать что-то вроде:
BufferedWriter log;
Writer openForFile(String fileName) {
if (fileName != null)
return new PrintWriter(fileName);
else
return new OutputStreamWriter(System.out);
}
log = new BufferedWriter(openForFile(null)); //stdout
log = new BufferedWriter(openForFile("mylog.log")); // using a file
или что-то еще, это просто дать вам идею.
Ответ 2
Поскольку вы упоминаете, что это для ведения журнала, вы можете захотеть использовать библиотеку журналов, такую как log4j. Это позволит вам изменить назначение журнала (файл журнала или консоль), внеся изменения только в файлы конфигурации.