Java IO 5-打印流

  使用过 OutputStream 输出流的一定会有一种莫名的难受,因为每次给文件中输出内容都得先进行一次额外加工,输出二进制文件还好说,字节输出流直接走,但是IO操作总不能只和二进制文件打交道吧,想输出一个字符串,还得 getBytes() 一下,真是太麻烦了。

  但其实,JDK为了解决 OutputStream 这一缺陷,提出了打印流这个概念,即像打印一样将内容打印到文件里。

1. 自定义打印流

  首先,我们自己设计一个自己称手的打印流,毕竟自己动手,丰衣足食嘛。

// 自定义打印流工具类
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) {
            e.printStackTrace();
        }
    }

    // 重载各种数据类型的print()和println()方法
    public void println(String str) {
        this.print(str+"\n");
    }
    public void print(int num) {
        this.print(String.valueOf(num));
    }
    public void println(int num) {
        this.print(String.valueOf(num)+"\n");
    }
    // 还有各种类型的重载,这里就不进行赘述了


public class Test {

    public static void main(String[] args) throws Exception {
        // 使用自己定义的打印流
        File file = new File("E:\\IO\\demo.txt");
        PrintUtil print = new PrintUtil(new FileOutputStream(file));
        print.print("姓名: ");
        print.println("张三");
        print.print("年龄: ");
        print.println(10);
    }

}

测试一下,运行前测试文件夹:

Java IO 5-打印流_第1张图片

运行后:

Java IO 5-打印流_第2张图片

打印流

  接下来,我们看看JDK提供的打印流。

Java IO 5-打印流_第3张图片

// 字符打印流,我们用这个比较多
public class PrintWriter extends Writer

// 字节打印流
public class PrintStream extends FilterOutputStream
    implements Appendable, Closeable

测试一下JDK的打印流:

public class Test {

    public static void main(String[] args) throws Exception {
        PrintWriter print = new PrintWriter(new FileOutputStream(new File("E:\\IO\\demo.txt")));
        print.print("姓名: ");
        print.println("李四");
        print.print("年龄: ");
        print.println(12);
        // 打印流需要关闭
        print.close();
    }

}

运行结果:

Java IO 5-打印流_第4张图片

  Java为了吸引C/C++程序员的加入,在PrintWrite类中还提供了一个带有格式化输出的方法。

// 格式化输出,格式嘛与C/C++的printf函数如出一辙
public PrintWriter printf(String format, Object ... args)

  看下面的例子:

public class Test {

    public static void main(String[] args) throws Exception {
        PrintWriter print = new PrintWriter(new FileOutputStream(new File("E:\\IO\\demo.txt")));
        String name = "xucc";
        int age = 10;
        double annualSalary = 300000.12345;

        print.printf("姓名:%s, 年龄:%d, 年薪:%1.2f", name, age, annualSalary);

        // 打印流需要关闭
        print.close();
    }
}

运行结果:

Java IO 5-打印流_第5张图片

  其实这样的效果 String 类也能做到,使用下面的方法实现格式化:

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

  使用如下:

String name = "xucc";
int age = 10;
double annualSalary = 300000.12345;

String str = String.format("姓名:%s, 年龄:%d, 年薪:%1.2f", name, age, annualSalary);
System.out.println(str);

显示结果:

Java IO 5-打印流_第6张图片

你可能感兴趣的:(JavaSE,JavaSE从零开始,自定义打印流,PrintWriter,PrintStream)