Подтвердить что ты не робот

Как написать стандартный вывод с использованием 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 всюду, и изменение вывода в файл на самом деле не является вариантом.

4b9b3361

Ответ 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. Это позволит вам изменить назначение журнала (файл журнала или консоль), внеся изменения только в файлы конфигурации.