如何使用BufferedWriter写入标准输出

amc*_*ack 25 java

我目前正在编写一个使用BufferedWriter生成多个日志文件的应用程序.但是,在调试时,我想写入System.out而不是文件.我想我可以改变:

log = new BufferedWriter(new FileWriter(tokenizerLog));
Run Code Online (Sandbox Code Playgroud)

至:

BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
log.write("Log output\n");
Run Code Online (Sandbox Code Playgroud)

而不是:

System.out.println("log output")
Run Code Online (Sandbox Code Playgroud)

新的OutputStreamWriter选项虽然没有奏效.如何只更改BufferedWriter构造函数中的Object以从文件重定向到Standard out.因为我有几个日志文件,我将写入,使用System.out无处不在,并将输出更改为文件实际上不是一个选项.

Jac*_*ack 40

您的方法确实有效,您只是忘记刷新输出:

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();
}
Run Code Online (Sandbox Code Playgroud)

两个OutputStreamWriterPrintWriterWriter实例,因此你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

或者其他什么,它只是给你一个想法..