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

文本信息中的内容为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条的,日志信息记录保存目的达成!

(JAVA)从零开始之--打印流PrintStream记录日志文件相关推荐

  1. java基础----IO打印流PrintStream

    package com.henu.io;import java.io.PrintStream;/** •public PrintStream(String fileName): 使用指定的文件名创建一 ...

  2. 【java笔记】打印流printStream

    printStream打印流: 继承了OutPutStream 1.只负责输出,不负责读取. 2.不抛出IOException 3.特有的方法:print/printLn(任意类型的值) 构造方法: ...

  3. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  4. IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...

    一.文件的遍历 1.需求:对指定目录进行所有的内容的列出(包含子目录的内容)-文件的深度遍历 思想:递归的思想,在递归的时候要记住递归的层次. public class FileTest {publi ...

  5. java io流printstream_java IO流:打印流 PrintStream

    打印流 PrintStream PrintStream extends FilterOutputStream PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式 特 ...

  6. JAVA打印流PrintStream 常用方式

    JAVA打印流PrintStream 常用方式 打印流:PrintStream : 继承于OutputStream ,可以使用OutputStream的方法 ***主要用于改变标准输出流方向. (1) ...

  7. 打印流PrintStream和配置流Propeties

    打印流PrintStream和PrintWriter /*** 打印流PrintStream*/@Testpublic void Print() throws IOException {PrintSt ...

  8. Java数据流和打印流

    数据流 DataInputStream和DataOutputStream两个类创建的对象分别被称为数据输入流和数据输出流.这是 很有用的两个流,它们允许程序按与机器无关的风格读写Java数据.所以比较 ...

  9. Java——IO(打印流)

    1,打印字节流(PrintStream)的概述: 打印流可以很方便的将对象的toString()结果输出并且自动加上换行,而且可以使用自动刷出的模式 System.out就是一个PrintStream ...

最新文章

  1. 百度开设「黄埔学院」,革新者来
  2. 《Java8实战》-第六章读书笔记(用流收集数据-01)
  3. 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 )
  4. MATLAB中FFT的使用方法
  5. 我的OI生涯 第六章
  6. 论文浅尝 | 基于迭代的概率规则约束的知识图谱分布式表示
  7. r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
  8. 小孔成像实验探究的软件_小孔成像法观察日食
  9. C.Fountains(Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)+线段树+RMQ)...
  10. c语言如何输出字符问号,C语言入门5-键盘的输入和屏幕输出
  11. Unity3D脚本学习1
  12. 西门子PLC,STEP7 v5.5安装以及仿真软件Plcsim v5.4 sp5安装
  13. 威胁猎人|改机工具在黑灰产中的应用
  14. 基于java的志愿信息管理系统_毕业设计 基于JAVA的志愿者管理系统的设计与实现...
  15. 【Python+Excel】批量操作Excel工作表和工作簿的5个实例
  16. React-bootstrap 中文文档
  17. 爬虫图片mysql_爬取微博图片数据存到Mysql中遇到的各种坑\爬取微博图片\Mysql存储图片\微博爬虫...
  18. 【文献翻译】Concealed Object Detection(伪装目标检测)
  19. 撤销Excel表格保护
  20. 适配器模式设计插头标准

热门文章

  1. 8.27 直播| 挖掘传统行业日志大数据的无限价值
  2. Linux学习整理(一)
  3. TCP的三次握手,四次断开
  4. JavaScript 小记 之 闭包(Closures)
  5. apache一个ip多个端口虚拟主机
  6. 众方网络电话VOIP FREEGO EIS系统命令
  7. 职场女人的心理问题提醒
  8. python3 logging 句柄释放 shutdown 简介
  9. python flask gunicorn nginx 部署
  10. jmeter性能测试入门简介