重定向输出流实现程序日志 (Java经典编程案例)

System类中的out成员变量是Java的标准输出流,程序常用它来输出调试信息。out成员变量被定义为final类型的,无法直接重新复制,但是可以通过setOut()方法来设置新的输出流。
本实例利用该方法实现输出流的重定向,输出一个文件,记录程序运行过程的步骤,并在控制台提示运行结束的信息。
代码如下:

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

/**
 * 重定向输出流实现程序日志
 */
public class Example {
    public static void main(String[] args) {
        try {
            PrintStream out = System.out;//保存原输出流
            //创建文件输出流
            PrintStream ps = new PrintStream("C:/amyfile/tempfile/log.txt");
            System.setOut(ps);//设置使用新的输出流
            int age =18;
            System.out.println("年龄变量成功定义,初始值为18");
            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类型的,不能直接赋值,要通过相应的方法来改变流。下面介绍改变这三个成员变量的方法。

  1. setOut()方法 :用于重新分配System类的标准输出流。该方法的声明如下:(out为PrintStream输出流对象)
    > public static void setOut(PrintStream out) {checkIO();setOut0(out);}

  2. setErr()方法 :用于重新分配System类的标准错误输出流。该方法的声明如下:在这里插入图片描述

  3. setIn()方法 :重新设置System类的in成员变量,即标准输入流。该方法的声明如下:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cui_yonghua/article/details/91870673