欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

九、Java IO流之打印流

程序员文章站 2022-04-03 18:01:18
...

在java.io包里面最为原始的输出支持的操作方法是:OutputStream.write()、Writer.write(),但是这两个操作方法都有问题,功能设计上不足,因为这两个操作只支持字符串或字节数组的输出,但是从实际的开发来讲,输出的操作可能有各种数据类型。

现在假设说要求你设计一个类,这个类可以实现各种数据类型的输出。
九、Java IO流之打印流

例:最初的设计方案

import java.io.*;

class PrintUtil implements Closeable{
    private OutputStream output;

    public PrintUtil(OutputStream output) { //设置输出的位置
        this.output = output;

    }

    public void print(String str){
        try {
            this.output.write(str.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void print(int num){
        this.println(String.valueOf(num));

    }

    public void println(String str){
        try {
            this.print(str+"\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public void println(int num){
        this.println(String.valueOf(num));

    }

    @Override
    public void close() throws IOException {

       this.output.close();
    }
}


public class TestDemo_10 {


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

        PrintUtil pu = new PrintUtil(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
        pu.println("姓名:呵呵");
        pu.print("年龄:");
        pu.println(33);
        pu.close();

    }

}

执行结果:
九、Java IO流之打印流
此时的代码只是调用的形式简化了,但是本质上并没有发生任何的改变。那么这样的设计思想就称为装饰设计模式。我们都已经知道OutputStream类的输出操作不方便了,那么Java设计人员也一定明白。

那么为此提供了两个输出功能类:
PrintStream、PrintWriter

观察这两个类的定义以及构造方法:

PrintStream
定义:

public class PrintStream extends FilterOutputStream implements Appendable, Closeable

构造方法:

PrintStream(OutputStream out) 
          创建新的打印流。

PrintWriter
定义:

public class PrintWriter extends Writer

构造方法:

PrintWriter(OutputStream out) 
          根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
PrintWriter(Writer out) 
          创建不带自动行刷新的新 PrintWriter。

九、Java IO流之打印流

例:使用打印流输出


public class TestDemo_10 {
    public static void main(String[] args)throws Exception {

        PrintWriter pw = new PrintWriter(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
        pw.println("姓名:哈哈");
        pw.print("年龄:");
        pw.println(33);
        pw.close();

    }

}

执行结果:
九、Java IO流之打印流
JDK1.5之后,String类提供有format()字符串格式化方法,实际上在PrintStream、PrintWriter类里面也提供有格式化的输出操作方法:

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

例:格式化输出

public class TestDemo_10 {


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

        PrintWriter pw = new PrintWriter(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
        String name = "嘿嘿";
        int age = 33;
        double score=100.1234567;
        pw.printf("姓名:%s、年龄:%d、分数:%5.2f",name,age,score);

        pw.close();

    }

}

执行结果:
九、Java IO流之打印流

是不是找到了C语言的感觉

在以后程序进行(非二进制数据)内容输出的时候,优先考虑使用打印流完成,如果有中文建议使用PrintWriter

OutputStream只适合于输出二进制数据,如果是明文的数据一定要使用打印流完成。

打印流采用的是装饰设计模式

相关标签: Java重点知识