PrintStream 了解
PrintWriter 掌握
1. 打印输出流的特性
打印流的特点:
不负责数据源,只负责数据目的
为其他输出流,添加功能
永远不会抛出IO异常,但是可能抛出别的异常
PrintStream与PrintWriter的区别:
PrintStream构造方法 PrintWriter构造方法PrintStream、PrintWriter的方法名是完全一致的,一般用PrintWriter,灵活性更强
手册中PrintWriter说明了:PrintWriter类实现了在PrintStream类中的所有print方法
PrintStream和PrintWriter的区别在构造方法上,指定输出的目的端
PrintSteam构造方法接收:
File类型、字符串文件名、字节输出流OutputStream
PrintWriter构造方法接收:
File类型、字符串文件名、字节输出流OutputStream、字符输出流Writer
2. PrintWriter实例
由于PrintWriter比PrintStream多了字符输出流Writer的构造方法,因此PrintWriter更灵活,PrintStream可以不用再学习
2.1. 打印流输出目的是File对象 PrintWriter(File file)
输出文件testPrint结果:
97
a
因为Wrinter都是字符数出流必须要做flush(), 否则println的字符是不会写入File对象的文件testPrint中的,或者最后做一次close()一次刷新数据到文件中
还需要注意的是,上面结果是先打印了97换行,再打印出一个字符a
说明println是一个原样输出方法,不同于write,write会经过Ascii码表翻译
2.2. 输出语句是char[] 数组
查看api手册,发现PrintWriter中的方法参数对数组的支持只有char[]数组,并不支持其他类型的数组,因此,如果是其他类型必须一个个数据写入,不能用该类型的数组
查看println源码:
查看testPrint文件结果:
[I@6d06d69c
abc
100
103
105
2.3. 打印流输出目的是String和流对象
2.3.1. PrintWriter(String fileName)
可以不做flush
2.3.2. PrintWriter(OutputStream out) 字节输出流
2.3.3. PrintWriter(Writer out) 字符输出流
这里演示用了FileWriter使用默认编码格式,也可以用OutputStreamWriter指定编码格式
2.4. 打印流开启自动刷新
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)
自动刷新即:可以不做flush()。 需要满足2个条件:
1. 输出的数据目的必须是流对象: OutputStream、Writer
2. 必须调用println(),printf(),format()三个方法中的一个才可以(也就是说File类、String类都不行,调用了wirte()方法也不行)
这里将close()方法去掉来做演示,但是在正式项目中是一定要做close()的:
另外,如果一定要将File对象做自刷新,可以将File转换为流对象,再做自刷新
2.5. 打印流复制文本文件
由于是文本文件,所以用字符流来做,另外考虑效率,选择Buffered。所以用BufferedReader来读取文件数据
而拷贝写入的时候,使用自动刷新
另外,编程的时候很容易忘记close()两个文件描述符,再一次提醒!!!!
网友评论