Java之打印流

2018-09-05  本文已影响0人  如果仲有听日

PrintStream    了解

PrintWriter      掌握


1. 打印输出流的特性

打印流的特点:

    不负责数据源,只负责数据目的

    为其他输出流,添加功能

    永远不会抛出IO异常,但是可能抛出别的异常

PrintStream与PrintWriter的区别:

    PrintStream、PrintWriter的方法名是完全一致的,一般用PrintWriter,灵活性更强

    手册中PrintWriter说明了:PrintWriter类实现了在PrintStream类中的所有print方法

    PrintStream和PrintWriter的区别在构造方法上,指定输出的目的端

        PrintSteam构造方法接收:

            File类型、字符串文件名、字节输出流OutputStream

        PrintWriter构造方法接收:

            File类型、字符串文件名、字节输出流OutputStream、字符输出流Writer

PrintStream构造方法 PrintWriter构造方法

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()两个文件描述符,再一次提醒!!!!

上一篇下一篇

猜你喜欢

热点阅读