“全栈2019”Java异常第十四章:将异常输出到文本文件中

231 阅读7分钟

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

友情提示

  • 本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
  • 本章内容针对零基础或基础较差的同学比较友好,可能对于有基础的同学来说很简单,希望大家可以根据自己的实际情况选择继续看完或等待看下一篇文章。谢谢大家的谅解!

1.实际开发的需求

将异常写到文本文件有实际需求吗?

有。在实际项目中,我们对于异常的处理不光要记录在日志中,而且还要写入文件中,然后将其存储起来。

这样做的目的是什么?

这样做的目的只有一个,那就是为了日后好做分析

收集错误信息,然后改进程序,这是做好程序开发的必备技能。

请问我们日常在使用电脑的过程有哪些收集错误信息的例子?

例子比较多,这里举两个例子。

“全栈2019”Java异常第十四章:将异常输出到文本文件中

比如大家熟悉的蓝屏,蓝屏的界面会出现一行正在收集错误信息的字而且还要收集进度条;

“全栈2019”Java异常第十四章:将异常输出到文本文件中

再比如我们有些程序崩溃了之后,要求你上报错误信息,这都是在收集错误信息,收集它们是为了研发和改进我们的程序

2.准备文件

今天就和大家一起来研究这么将异常写入文件中。

既然是要将异常写入文件中,那么我们肯定得准备文件。所以,请大家打开你的IntelliJ IDEA,然后在IntelliJ IDEA中打开你的项目,在你的项目src目录下新建一个error.txt文件。

“全栈2019”Java异常第十四章:将异常输出到文本文件中

可能大家从图中看到了lab包和main包,其中lab包是我给大家演示时用的包,大家不用建;main包是我放Main.java的包,大家也可以像我一样将Main.java放在里面。

注意:

这里为了演示,所以文件格式是txt,实际开发中是log,而且实际开发中异常用日志来记录是通过配置文件实现自动化的,但是我们今天演示的原理和那个差不多,请大家务必担心,很多东西都是由基础的建设发展而来的,只要我们搞清楚基础的东西遇到复杂点的技术一样能够弄明白它里面是怎么实现的,希望大家能够通过牢牢掌握基础知识增强自信心。

3.准备异常

文件准备好了,我们来准备程序和异常。我们的程序在Main类中:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

程序很简单,就是main()调用a(),a()调用b(),b()调用c(),c()里面发生异常。这样写没有特殊的原因,就是异常打印的结果看起来更多而已。

运行程序,执行结果:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

这个结果我们应该已经很熟悉了,上一章我们对此进行过分析。没有看过的小伙伴可以去看一下:《“全栈2019”Java异常第十三章:访问异常堆栈跟踪信息》

回到结果中来,我们可以看到异常被打印在了控制台,这是方便我们调试。接下来,我们要将异常记录到error.txt文件中。

4.将异常记录到文件中

文件也准备了,异常程序也准备了,接下来正式开工,将异常记录到文件中。

我们知道异常发生以后,由catch复制捕获异常,然后我们得以有机会去处理该异常,所以我们能将异常记录到文件中的地方就在catch中:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

这也是我们唯一的机会。

好了,知道在哪记录异常,接下来我们要知道怎么记录异常。

记录异常需要借助一个方法,这个方法就是printStackTrace​()的重载方法:

voidprintStackTrace​(PrintWriter s)

它需要一个参数PrintWriter对象,而PrintWriter是一个打印输出流,打印输出流没学没有关系,你只需知道单词Writer翻译过来是写的意思,顾名思义就是写什么东西到什么地方。综上所述,就是printStackTrace​(PrintWriter s)方法负责将异常写到你指定的地方中去。

多说无益,直接改写我们的程序。

在改写我们程序之前,首先请大家负责刚刚我们创建的error.txt文件路径,因为接下来要用:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

具体负责操作就是右键error.txt,然后选择“Copy Path”即可

接着,我们来改写我们的程序。

首先,我们创建PrintWriter对象:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

然后,将我们的文件路径传进去:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

紧接着,我们会遇到一个FileNotFoundException异常需要处理,处理方式就是将其throws出去:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

然后,我们就在调用者b()方法里面进行try-catch处理:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

接下来,我们就调用异常对象的printStackTrace​(PrintWriter s)方法,并将PrintWriter对象传进去:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

工作好像已经都做完了,我们来运行程序看看:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

控制台没有任何东西,好像程序本身执行没有问题,我们再去看看error.txt文件,看有没有异常写入进来:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

空的,啥也没有。

难道是我们程序哪里写得不对吗?还是少写了什么?

这里给大家说一下,是我们少写了一步,那就是关流。关流这个呢,我们并不陌生,在讲解《“全栈2019”Java异常第五章:一定会被执行的finally代码块》的时候就有接触。

我们就不再赘述了,不清楚的小伙伴可以前去阅读一下。

接下来,我们就来实现关流操作:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

再运行程序看看:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

控制台是空的,什么都没有。去看看error.txt文件:

“全栈2019”Java异常第十四章:将异常输出到文本文件中

大功告成,异常已经成功的被我们写入文件中。

相关应用

  • 将异常写入日志文件中
  • 将客户端异常发送至服务器进行收集
  • 将异常通过邮件的方式通知开发者
  • ......等等

小伙伴们,你们还能想到什么跟收集异常相关的应用?请在下方给我们评论留言。

PrintWriter、Writer【温馨提示】

这里我还是想说明一下,IO流暂时没有学,希望大家不要因为搞不懂什么是打印输出流而感到沮丧,因为后面我们马上就会出IO流系列教学,到时候这些问题都不是事,希望大家能够记住有这么个东西即可。

总结

  • 在实际项目中,我们对于异常的处理不光要记录在日志中,而且还要写入文件中,然后将其存储起来。
  • 我们有些程序崩溃了之后,要求你上报错误信息,这都是在收集错误信息,收集它们是为了研发和改进我们的程序。
  • 借助printStackTrace​(PrintWriter s)方法实现将异常信息记录在文本文件中。

至此,Java中printStackTrace​(PrintWriter s)方法相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java异常第十三章:访问异常堆栈跟踪信息

下一章

“全栈2019”Java异常第十五章:异常链详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java异常第十四章:将异常输出到文本文件中

版权声明

原创不易,未经允许不得转载!