重温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;

    /**
     * 单参构造函数
     * <p>
     * 由外部来决定输出的位置
     *
     * @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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值