日期:2014-05-20  浏览次数:20783 次

关于System.out重定向到文件的问题
我打算将System.out和System.err重定向到日志文件
想实现这样的功能
1.把通过system.out.print还有系统抛出的报错信息全部写到日志里面去
2.每次程序重新运行的时候,新的信息是追加在日志以前信息后面的
写了这样一个方法
public static void setSystemOut2LogFile(){
// 在文件上建立一个PrintStream
final String logfile = "111.txt";
File fl = new File(logfile);
try{
PrintStream myout = new PrintStream(new FileOutputStream(fl)){
public void println(String str){  
write2File(logfile,readFile(logfile)+"\r\n"+str+"\r\n","GBK");//注:这里我打算重载println函数的,发现还是不行
}
};
  // 重定向System.out 到该文件
  System.setOut(myout);
  System.setErr(myout);
}
catch(Exception ee){
ee.printStackTrace();
}
}

main函数里面调用了这个方法

调试的时候发现
每次重新运行程序的时候,执行到PrintStream myout = new PrintStream(new FileOutputStream(fl)这句的时候,会把文件全清了,之前的日志全没了
对io不是很熟,希望高手指点下,如何在之前的文件上实现追加信息?


------解决方案--------------------
现在java的日志控件很多,为什么还要自己写呢。
log4j。
------解决方案--------------------
FileOutputStream(fl,true); // 增加那个 true参数

请参考
http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/io/FileOutputStream.html#FileOutputStream(java.lang.String,%20boolean)
------解决方案--------------------
类FileOutputStream
的构造函数:
public FileOutputStream(String name,
boolean append)
throws FileNotFoundException

创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。