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

Java IO 5-打印流

程序员文章站 2024-03-04 21:01:54
...

  使用过 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-打印流

运行后:

Java IO 5-打印流

打印流

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

Java IO 5-打印流

// 字符打印流,我们用这个比较多
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-打印流

  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-打印流

  其实这样的效果 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-打印流