java I/O———打印流

打印流解决的就是OutputStream的设计缺陷,属于OutputStream功能的加强版。如果操作的不是二进制数据,只是想通过程序向终端目标输出信息的话,OutputStream不是很方便,其缺点有两个:

  1. 所有的数据必须转换为字节数组。
  2. 如果要输出的是int、double等类型就不方便了

打印流概念

打印流设计的主要目的是为了解决OutputStream的设计问题,其本质不会脱离OutputStream。

范例:自己设计一个简单打印流

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

class PrintUtil {
    private OutputStream out ;
    // 由外部传入要输出的目标终端
        public PrintUtil(OutputStream out) {
            this.out = out ;
    }
    // 核心功能就一个
    public void print(String str) {
        try {
            this.out.write(str.getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void println(String str) {
        this.print(str+"\n");
    }
    public void print(int data) {
        this.print(String.valueOf(data));
    }
    public void println(int data) {
        this.println(String.valueOf(data));
    }
    public void print(double data) {
        this.print(String.valueOf(data));
    }
    public void println(double data) {
        this.println(String.valueOf(data));
    }
    }

public class TestPrint {
    public static void main(String[] args) throws Exception {
        PrintUtil printUtil = new PrintUtil(new FileOutputStream(new
        File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.print("姓名:") ;
        printUtil.println("fiying fish") ;
        printUtil.print("年龄:") ;
        printUtil.println(21) ;
        printUtil.print("工资: ") ;
        printUtil.println(0.0001);
    }
}

经过简单处理之后,让OutputStream的功能变的更加强大了,其实本质就只是对OutputStream的功能做了一个封装而已。java提供有专门的打印流处理类:PrintStream、PrintWriter

2.使用系统提供的打印流

打印流分为字节打印流:PrintStream、字符打印流:PrintWriter,以后使用PrintWriter机率较高。首先来观察这两个类的继承结构与构造方法:

在这里插入图片描述

在这里插入图片描述

此时看上图继承关系我们会发现,有点像之前讲过的代理设计模式,但是代理设计模式有如下特点:

  1. 代理是以接口为使用原则的设计模式。
  2. 最终用户可以调用的方法一定是接口定义的方法。

打印流的设计属于装饰设计模式:核心依然是某个类的功能,但是为了得到更好的操作效果,让其支持的功能更多一些

范例:使用打印流

public class TestPrint {
    public static void main(String[] args) throws Exception {
        PrintWriter printUtil = new PrintWriter(new FileOutputStream(new File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.print("姓名:") ;
        printUtil.println("flying fish") ;
        printUtil.print("年龄:") ;
        printUtil.println(21) ;
        printUtil.print("工资: ") ;
        printUtil.println(0.00001) ;
        printUtil.close();
    }
}

以后的开发之中一定会用到打印流。

3.格式化输出

C语言有一个printf()函数,这个函数在输出的时候可以使用一些占位符,例如:字符串(%s)、数字(%d)、小数(%m.nf)、字符(%c)等。从JDK1.5开始,PrintStream类中也追加了此种操作。

格式化输出:

public PrintStream printf(String format, Object ... args)

范例:观察格式化输出

public class TestPrint {
    public static void main(String[] args) throws Exception {
        String name = "fiyingfish" ;
        int age = 21 ;
        double salary = 1.10000001 ;
        PrintWriter printUtil = new PrintWriter(new FileOutputStream(new
File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.printf("姓名:%s,年龄:%d,工资:%1.2f", name,age,salary) ;
        printUtil.close();
    }
}

同时在String类中也追加有一个格式化字符串方法。

格式化字符串:

public static String format(String format, Object... args)

范例:格式化字符串

public class TestPrint {
    public static void main(String[] args) throws Exception {
        String name = "flyingfish" ;
        int age = 21 ;
        double salary = 1.1000001 ;
        String str = String.format("姓名:%s,年龄:%d,工资:%1.2f",name,age,salary,
name,age,salary) ;
            System.out.println(str);
    }
}

Ajax都是打印流支撑的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章