System类中的out成员变量是java的标准输出流通常用它来输出调试信息out成员变量被定义为final类型无法直接重新复制但是可以通过setOut()方法来设置新的输出流本例通过该方法实现了输出流的重定向把它指向一个文件输出流从而实现了日志功能程序运行后绘制控制台提示运行结束信息但是在运行过程中的步骤保存到了日志文件中 调用System类的setOut()方法改变了输出流System类的outerr和in成员变量是final类型的不能直接赋值要通过相应的方法来改变流 setOut()方法重新分配System类的标准输出流方法声明 Public static void setOut(PrintStream out) out:新的PrintStream输出流对象 setErr()方法重新分配System类的标准错误输出流方法声明 Public static void setErr(PrintStream err) err:新的PrintStream输出流对象 setIn()方法重新设置System类的in成员变量即标准输入流 创建RedirectOutputStream类编写main()主方法在该方法中保存System类的out成员变量为临时变量然后创建一个新的文件输出流并把这个文件输出流设置为System类新的输出流在程序关键位置输出调试信息这些调试信息将通过新的输出流保存到日志文件中最后恢复原有输出流并输出程序运行结束信息关键代码 import javaioFileNotFoundException; import javaioPrintStream; public class RedirectOutputStream { public static void main(String[] args) { try { PrintStream out=Systemout; //保存原输出流 PrintStream ps=new PrintStream(/logtxt) //创建文件输出流 SystemsetOut(ps) //设置使用新的输出流 int age=; Systemoutprintln(年龄变量成功定义初始值为) String ***=女; Systemoutprintln(性别变量成功定义初始值为女) String info=这个是+***+孩子应该有+age+岁了!; Systemoutprintln(整合两个变量为info字符串变量其结果是+info) SystemsetOut(out) //恢复原有输出流 Systemoutprintln(程序运行完毕请查看日志文件) } catch(FileNotFoundException e) { eprintStackTrace() } } } |