当需要将java程序中的System.out.println的输出保存到日志文件时,我们可以将System.out重定位到日志文件。详见如下code
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class Redirector {
private PrintStream printStream = null;
private PrintStream sysout = System.out;
private PrintStream syserr = System.err;
public Redirector(){
try {
File file = new File("c:\\out.log");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
printStream = new PrintStream(new FileOutputStream(file, true));
// set output to file instead of console
System.setOut(printStream);
System.setErr(printStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void outputByOut() {
System.out.println("Hello world from Out!");
}
public void outputByErr() {
System.err.println("Hello world from Err!");
}
public void close() {
if (printStream != null) {
printStream.close();
}
// Reset the output to console
System.setOut(sysout);
System.setErr(syserr);
}
public static void main(String[] args){
Redirector redirector = new Redirector();
redirector.outputByOut();
redirector.outputByErr();
redirector.close();
}
}
在上述code中,为何没有将printStream.close()直接放到outputByOut()方法呢?因为如果还有其他方法也需要把System.out重定位到同一个文件,一旦关闭了printStream,System.out就恢复到标准输出流了。此外,我们还可以利用System.setIn(InputStream is)将System.in重定位到一个文件。