打印流PrintStream记录日志文件

这里的记录日志是利用打印流来实现的。

文本信息中的内容为String类型。而像文件中写入数据,我们经常用到的还有文件输出流对象FileOutputStream.

1 File file = new File("F:\\a.txt");
2 FileOutputStream outputStream = new FileOutputStream(file,true);//第二个参数为追加文本
3 outputStream.write(97);

上面的代码执行完之后,a.txt中的内容存的是a,因为write方法接收的为byte类型的数据,97对应的ASCII码为a。

假设我就想将97写入到文件中呢?那么得将第三行代码改为

1 outputStream.write("97".getBytes());//先将97作为字符串再转换为byte数组

而PrintStream得出现,是的我们写数据入文件变得十分方便,你传入的是什么,就会给你写入什么数据。原因是他内部帮我们转换活了

1 File file = new File("F:\\a.txt");
2 PrintStream printStream = new PrintStream(file);
3 printStream.println(97);
4 printStream.println('a');
5 printStream.println("hello world");
6 printStream.println(true);
7 printStream.println(3.14);
8 printStream.println(new Student("酒香逢"));

上面这段代码得到的结果为:

可见不管什么数据类型,都会转换为字符串,甚至是对象也不例外。

这里再说一下学习Java时少不了用到的一句代码:System.out.println();代码中的out,为System类中的一个PrintStream对象,称之为标准输出流对象。标准输出流对象会将数据打印到控制台上。查阅API可知有如下方法,

static void setOut(PrintStream out) //重新分配“标准”输出流。

可以重新指定输出流对象,即将System.out.println();的输出内容打印到我们想打印到的地方。

1 File file = new File("F:\\a.txt");
2 PrintStream printStream = new PrintStream(file);
3 System.setOut(printStream);
4 System.out.println("打印到F:\\a.txt中");

这时候内容回写入到文件a.txt中去,而不是打印在控制台中。

最后回归本文重点,日志信息的保存。

假设有代码:

1 try{
2    int n = 5/0;
3 }catch(Exception e){
4    e.printStackTrace();
5 }

执行结果会抛出我们想要的错误日志信息。

java.lang.ArithmeticException: / by zero
    at log.DemoLog.main(DemoLog.java:26)

这时候想将日志信息保存起来怎么办呢?

看到Exception类中的这3个重载方法,我们不难得知,只要给他指定一个打印输出流对象当中,即可将日志信息保存到我们想要的地方。

1 File file = new File("F:\\a.log");
2        PrintStream printStream = new PrintStream(file);
3        try{
4            int n = 5/0;//除数为零异常
5        }catch(Exception e){
6            e.printStackTrace(printStream);
7        }

上面这段代码执行重复执行多次,

但是记录的日志信息永远只会记录一条。这明显不是我们想得到的,日志信息,总不能只记录一条吧?那么它存在又有什么用?

其实,追加文本信息的决定者不是e.printStackTrace(printStream);方法,关键点在于流对象,

可见打印流对象是存在一个OutputStream接口作为参数的传入对象。既然是接口,那么就无法new出OutputStream的对象了,可以用他的子类FileOutputStream对象作为参数传入。并且,FileOutputStream流是可以追加的,

new FileOutputStream(file,true);//第二个参数为追加文本

此时将其作为参数传入,PrintStream流自然也就可以追加内容了。

1 File file = new File("F:\\a.log");
2        PrintStream printStream = new PrintStream(new FileOutputStream(file,true),true);
3        try{
4            int n = 5/0;//除数为零异常
5        }catch(Exception e){
6            e.printStackTrace(printStream);
7        }

将代码执行3次后:


可以看到日志信息是保存有3条的,日志信息记录保存目的达成!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/60a0b581ecf39f022d13b26390ec8fc4.html