FileOutputStream bos = new FileOutputStream("output.txt");
System.setOut(new PrintStream(bos));
System.out.println("output to output.txt");
這樣,console的輸出全部寫入文件output.txt,但是控制檯不會有輸出信息。
如果希望控制檯也有輸出:
新建一個繼承java.io.OutputStream的類,實現多輸出方式
import java.io.IOException;
import java.io.OutputStream;
public class MultiOutputStream extends OutputStream {
OutputStream outputStream1,outputStream2;
public MultiOutputStream(OutputStream stream1, OutputStream stream2 )
throws IOException{
outputStream1 = stream1;
outputStream2 = stream2;
}
@Override
public void write(int b) throws IOException {
// TODO Auto-generated method stub
outputStream1.write(b);
outputStream2.write(b);
}
}
再調用該類的對象
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
class Out2File {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
PrintStream oldPrintStream = System.out;
FileOutputStream bos = new FileOutputStream("output.txt");
MultiOutputStream multi = new MultiOutputStream(new PrintStream(bos),oldPrintStream);
System.setOut(new PrintStream(multi));
System.out.println("test");
}
}
這樣console和文件中都會有輸出
1、要解決console和文件同時輸出的問題還需要自己實現一個OutputStream,讓OutputStream能同時寫入多個輸出.
首先繼承java.io.OutputStream,然後實現public abstract void write(int b) throws IOException; 並且覆寫java.io.OutputStream中的其他的方法,具體的實現方式按照自己的需求來做,這裏就不做出具體的實現了.
通過實現自己實現OutputStream之後,
在
PrintStream printStreamOut = new PrintStream(outputStreamOut);
PrintStream printStreamErr = new PrintStream(outputStreamErr);
中分別把outputStreamOut和outputStreamErr對象換成自己實現的OutputStream對象,這樣就可以實現在一個OutputStream對象中進行多個輸出操作.
在
PrintStream printStreamOut = new PrintStream(outputStreamOut);
PrintStream printStreamErr = new PrintStream(outputStreamErr);
中分別把outputStreamOut和outputStreamErr對象換成自己實現的OutputStream對象,這樣就可以實現在一個OutputStream對象中進行多個輸出操作.
按照以上的思路進行的實現,可以完全把控制檯的所有的輸出寫入到日誌文件中,包括System.out.println這樣的輸出.
ref:http://jianshusoft.blog.51cto.com/2380869/769913