重温java知识(三十八、I/O编程之八:打印流)

OutputStream只允许输出字节数据,Writer只允许输出字符数据和字符串数据。在实际开发中,会有多种数据类型的数据需要输出(如:整数、浮点数、字符、引用对象等),因而为了简化输出的操作,提供了两个打印流操作:

  • 字节打印流(PrintStream)
  • 字符打印流(PrintWriter)

1、使用PrintWriter实现文件内容输出的例子:

package com.mydemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;

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

        // 定义操作文件
        File file = new File("e:" + File.separator + "test.txt");

        // 实例化打印流对象
        PrintWriter printWriter = new PrintWriter(new FileOutputStream(file));

        // 输出数据并换行
        printWriter.println("姓名:张三");
        printWriter.print("年龄:");
        printWriter.print(20);

        // 关闭打印流
        printWriter.close();
    }
}

2、模拟打印流完善输出类支持的例子【打印流的设计思想:弥补已有输出流的不足,而本质上并没有脱离输出流的操作本质,这样的设计在java中被称为装饰设计模式(Decorator Pattern)】:

// 实现一些常用数据的输出
class PrintUtil implements AutoCloseable {

    // 核心操作为OutputStream
    private OutputStream outputStream;

    /**
     * 单参构造函数
     * 

* 由外部来决定输出的位置 * * @param outputStream */ public PrintUtil(OutputStream outputStream) { this.outputStream = outputStream; } /** * 换行输出字符串 * * @param num */ public void println(long num) { this.println(String.valueOf(num)); } /** * 输出字符串 * * @param num */ public void print(long num) { this.println(String.valueOf(num)); } /** * 输出字符串 * * @param str */ private void print(String str) { try { // 输出 this.outputStream.write(str.getBytes()); } catch (IOException e) { e.printStackTrace(); } } /** * 换行输出字符串 * * @param str */ private void println(String str) { this.print(str + "\r\n"); } @Override public void close() throws Exception { this.outputStream.close(); } }

3、格式化输出的例子:

package com.mydemo;

import java.io.*;

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

        // 定义操作的文件
        File file = new File("e:" + File.separator + "test.txt");

        // 实例化打印流对象
        PrintWriter printWriter = new PrintWriter(new FileOutputStream(file));

        // 姓名内容
        String name = "张三";

        // 年龄内容
        int age = 20;

        // 薪水内容
        double salary = 8800.6323113;

        /**
         * 格式化输出
         *
         * printf()方法设置数据的占位符与具体的数值结合进行操作
         * (字符串:%s、 整数:%d、 浮点数: %m.nf、 字符: %c)
         */
        printWriter.printf("姓名:%s、 年龄:%d、 收入:%1.2f", name, age, salary);

        printWriter.close();
    }
}

你可能感兴趣的:(Java)