Java IO流:(十二)打印流

一、打印流

打印流作用:实现将基本数据类型的数据格式转化为字符串输出。

打印流:PrintStream 和 PrintWriter

(1)提供了一系列重载的print()和println()方法,用于多种数据类型的输出;

(2)PrintStream和PrintWriter的输出不会抛出IOException异常;

(3)PrintStream和PrintWriter有自动flush功能;

(4)PrintStream和PrintWriter都可以指定编码方式。PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节,在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。

(5)System.out 返回的是PrintStream的实例

二、PrintStream

1、概述

平常在控制台打印输出,是调用 print 方法和 println 方法完成的,这两个方法都来自于 java.io.PrintStream 类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。

2、PrintStream 类

java.io.PrintStream:打印流。

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

PrintStream 特点:

① 只负责数据的输出,不负责数据的读取

② 与其他输出流不同,PrintStream 永远不会抛出 IOException

③ 有特有的方法,print,println;void print(任意类型的值);void println(任意类型的值并换行)

3、构造方法

PrintStream(File file):输出的目的地是一个文件

PrintStream(File file, String csn):创建具有指定文件名称和字符集且不带自动行刷新的新打印流

PrintStream(OutputStream out):输出的目的地是一个字节输出流

PrintStream(String fileName) :输出的目的地是一个文件路径

4、继承父类的成员方法

PrintStream extends OutputStream

继承父类的成员方法:

public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。

public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。

public abstract void write(int b) :将指定的字节输出流。

注意:

① 如果使用继承自父类的write方法写数据,那么查看数据的时候会查询编码表 97->a

② 如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97->97

自己特有的方法:

void print(boolean b) :打印 boolean 值。

void print(char c) :打印字符。

void print(char[] s):打印字符数组。

void print(double d) :打印双精度浮点数。

void print(float f):打印浮点数。

void print(int i):打印整数。

void print(long l):打印 long 整数。

void print(Object obj):打印对象。

void print(String s):打印字符串。

PrintStream printf(Locale l, String format, Object... args):使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。

PrintStream printf(String format, Object... args) :使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。

void println() :通过写入行分隔符字符串终止当前行。

void println(boolean x):打印 boolean 值,然后终止行。

void println(char x) :打印字符,然后终止该行。

void println(char[] x) :打印字符数组,然后终止该行。

void println(double x): 打印 double,然后终止该行。

void println(float x) :打印 float,然后终止该行。

void println(int x) :打印整数,然后终止该行。

void println(long x) :打印 long,然后终止该行。

void println(Object x):打印 Object,然后终止该行。

void println(String x) :打印 String,然后终止该行。

注意:所有数据类型写出去,都是按照文本处理的。

5、案例

1 public static void main(String[] args) throws FileNotFoundException {

2 System.out.println("HelloWorld"); // 在控制台打印输出

3

4 //创建打印流PrintStream对象,构造方法中绑定要输出的目的地

5 PrintStream ps = new PrintStream("E:\\print.txt");

6 //如果使用继承自父类的write方法写数据,那么查看数据的时候会查询编码表 97->a

7 ps.write(97);

8 //如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97->97

9 ps.println(97);

10 ps.println(8.8);

11 ps.println('a');

12 ps.println("HelloWorld");

13 ps.println(true);

14

15 //释放资源

16 ps.close();

17 }

6、重定向输出

可以改变输出语句的目的地(打印流的流向),输出语句,默认在控制台输出,使用System.setOut方法改变输出语句的目的地改为参数中传递的打印流的目的地

1 @Test

2 public void test() {

3 PrintStream ps = null;

4 try {

5 FileOutputStream fos = new FileOutputStream(new File("D:\\IO\\text.txt"));

6 // 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区)

7 ps = new PrintStream(fos, true);

8 if (ps != null) {// 把标准输出流(控制台输出)改成文件

9 System.setOut(ps);

10 }

11

12

13 for (int i = 0; i <= 255; i++) { // 输出ASCII字符

14 System.out.print((char) i);

15 if (i % 50 == 0) { // 每50个数据一行

16 System.out.println(); // 换行

17 }

18 }

19

20

21 } catch (FileNotFoundException e) {

22 e.printStackTrace();

23 } finally {

24 if (ps != null) {

25 ps.close();

26 }

27 }

28

29 }

三、PrintWriter

这个输出流主要应用于 JavaWeb 阶段,从服务器端往客户端返回消息时用到response,response.getWriter()可以返回PrintWriter对象。

即Web服务器往客户端(例如:浏览器)返回html网页时,用的是PrintWriter对象的输出方法。

[an error occurred while processing the directive]