System类中的out成员变量是java的标准输出流,程序常用它来调试信息。out成员变量被定义为final类型,无法直接复制,但是可以通过setOut()方法来设置新的输出流。下述方法实现了输出流的重定向,把它指向一个文件输出流,从而实现了日志功能。程序运行后控制台提示运行结束信息。

控制台提示运行结束信息:

重定向输入流实现程序日志

 

重定向输出流实现程序日志的效果:

重定向输入流实现程序日志

 

   创建RedirectOutputStream类,编写main()方法,在该方法中保存System类的out的成员变量为临时变量,然后创建一个新的文件输出流,并把这个输出流设置为System类新的输出流。在程序关键位置调试信息,这些调试信息将通过新的输出流保存到日志文件中,最后恢复原有输出流并输出程序运行结束信息。代码:

import java.io.FileNotFoundException;
import java.io.PrintStream;

public class RedirectOutputStream {
	public static void main(String[] args) {	
		try {
			PrintStream out =System.out;               //保留原有输出流
			PrintStream p = new PrintStream("./log.txt");  //创建文件输出流
			System.setOut(p);                           //设置新的输出流
			int age=21;
			System.out.println("年龄变量成功定义,初始值为21");
			String sex = "女";
			System.out.println("性别变量成功定义,初始值为女");
			String info = "这是个"+sex+"少女,应该有"+age+"岁了。";
			System.out.println("整合两个变量为info字符串变量,其结果时:"+info);
			System.setOut(out);                           //恢复原有输出流
			System.out.println("程序运行完毕,请查看日志文件。");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

       关键技术是调用了System类的setOut()方法改变了输出流,System类的out、err、和in、成员变量都是final类型的,不能直接赋值,要通过相应的方法来改变流。

setOut()方法:该方法用于重新分配System类的标准输出流。

setErr()方法:该方法用于重新分配System类的标准错误流。

setIn()方法:该方法用于重新分配System类的标准输入流。

相关文章: