【从零开始学Java | 第三十九篇】 打印流

目录

前言

一、字节打印流

1.构造方法

2.成员方法

3.代码演示

二、字符打印流

1.构造方法

2.成员方法

3.代码演示

三、打印流的应用场景

总结


前言

打印流属于高级流 ,分为处理字节的 PrintStream 和处理字符的 PrintWriter

有三个特点:

  • 打印流只操作文件目的地,不操作数据源。
  • 特定的写出方法可以实现数据的原样写出,例如:打印:97 文件中:97
  • 特有的写出方法可以实现自动刷新、自动换行

一、字节打印流

字节流底层没有缓冲区,因此打开自动刷新对效率的影响不大。

1.构造方法

构造方法 说明
public PrintStream(OutputStream/File/String) 关联字节输出流/文件/路径
public PrintStream(String fileName, Charset charset) 指定字符编码
public PrintStream(OutputStream out, boolean autoFlush) 自动刷新
public PrintStream(OutputStream out, boolean autoFlush, String encoding) 指定字符编码并刷新

2.成员方法

成员方法 说明
public void write(int b) 常规写入方法
public void println() 打印任意数据,自动刷新,自动换行
public void print() 打印任意数据不换行
public void printf(String format, Object ... args) 带有占位符的打印语句,不换行

3.代码演示

java 复制代码
public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        PrintStream ps = new PrintStream(new FileOutputStream("src\\d.txt"), true, Charset.forName("UTF-8"));

        ps.println(97);
        ps.println(true);
        ps.printf("%s 吃 %s", "鱼", "虾");
        ps.println();

        ps.close();
    }
}

运行结果:

二、字符打印流

字符流底层有缓冲区,想要自动刷新需要开启

1.构造方法

| 构造方法 | 说明 |
| public PrintWriter(OutputStream/File/String) | 关联字符输出流/文件/路径 |
| public PrintWriter(String fileName, Charset charset) | 指定字符编码 |
| public PrintWriter(OutputStream out, boolean autoFlush) | 自动刷新 |

public PrintWriter(OutputStream out, boolean autoFlush, String encoding) 指定字符编码并刷新

2.成员方法

| 成员方法 | 说明 |
| public void write(int b) | 常规写入方法 |
| public void println() | 打印任意数据,自动刷新,自动换行 |
| public void print() | 打印任意数据不换行 |

public void printf(String format, Object ... args) 带有占位符的打印语句,不换行

3.代码演示

java 复制代码
public class Test {
    public static void main(String[] args) throws IOException {
        PrintWriter pw = new PrintWriter(new FileWriter("src\\e.txt"));

        pw.println("你好你好你好");

        pw.close();
    }
}

运行结果:

三、打印流的应用场景

我们平时经常使用的System.out其实就是一个字节打印流,指向了本地控制台。

既然 System.out 本质上只是一个指向控制台的 PrintStream,那我们能不能把它改一下,让它指向一个本地文件呢?

java 复制代码
import java.io.PrintStream;

public class RedirectOutDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建一个新的打印流,指向我们指定的日志文件
        PrintStream fileOut = new PrintStream("C:\\system_log.txt");

        // 2. 把默认打印到屏幕的动作,重定向到我们的 fileOut 流中
        System.setOut(fileOut);

        // 3. 接下来所有的 System.out.println 都不再显示在屏幕上了
        System.out.println("【日志】系统启动成功...");
        System.out.println("【日志】连接数据库: localhost:3306");
        System.out.println("【日志】发现异常攻击,开始拦截!");

        // 记得关闭流
        fileOut.close();
        
    }
}

总结

  • 不需要捕获异常。

  • println(),什么对象传进去都能原样打印出字符串,还能自动换行。

  • 支持格式化 (printf)自动刷新 (auto-flush)

😃😃

相关推荐
QQ22792391022 小时前
Java springboot基于微信小程序的智慧旅游导游系统景点门票酒店预订(源码+文档+运行视频+讲解视频)
java·spring boot·微信小程序·maven·vuejs
晔子yy2 小时前
[JAVA探索之路]带你手写多线程实现生产者-消费者模型
java·开发语言
你不是我我2 小时前
【Java 开发日记】我们来讲一讲 MVCC 的实现原理
java·开发语言
ftpeak2 小时前
网络爬虫Playwright Python 教程:从入门到实战
开发语言·爬虫·python·playwright
啥咕啦呛2 小时前
跟着AI学Java第2天:Java基础语法巩固
java·python·算法
青云交2 小时前
Java 大视界 -- Java 大数据在智能医疗临床路径优化与医疗资源合理利用中的应用(424)
java·drools·spark streaming·智能医疗·apache camel·医疗资源调度·临床路径优化
摸鱼界在逃劳模2 小时前
Java的JDK下载与安装
java·开发语言
迷藏4942 小时前
**发散创新:基于Python的情感计算实战——从文本到情绪的智能识别**在人工智能与人机交互日益融合的今天,**情感计算(A
java·人工智能·python·人机交互
qq_12084093712 小时前
Three.js 骨骼动画工程实战:AnimationMixer、剪辑与混合权重调参
开发语言·javascript·ecmascript