news 2026/6/16 6:51:18

【Java 入门 Day25】 IO 流下篇:字符流 + 桥转换流 + File 工具类,解决文本乱码 文件管理难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java 入门 Day25】 IO 流下篇:字符流 + 桥转换流 + File 工具类,解决文本乱码 文件管理难题

家人们!上篇啃完万能字节流,今天专攻文本专用字符流、编码乱码解决方案、桥转换流,还有单独管理文件本体的 File 类,写日志、读取 txt、遍历文件夹全靠这套!

一、字符编码:乱码元凶全在这

所有文字传输本质是字符转二进制(编码)、二进制转回文字(解码),编码解码格式不一样直接全是问号乱码。 主流编码简单科普:

  1. ISO8859-1:西欧英文,单字节,不支持中文
  2. GBK/GB2312/GB18030:中文编码,GB2312 仅 6000 常用汉字,GBK 兼容两万汉字
  3. Big5:繁体中文
  4. UTF-8:万国通用编码,英文 1 字节、汉字 2~3 字节,项目标准编码

二、字符流顶层父类(抽象类,只操作纯文本)

  • Reader:字符输入流,读 txt 文本
  • Writer:字符输出流,写 txt、java、html 文本

三、字符节点流:FileReader / FileWriter

对标字节 File 流,只处理文本文件

FileWriter 文件字符输出流

构造路径写法和 FileOutputStream 完全一致,支持追加 / 覆盖。 三个 write 方法:

  1. write(int n):单个字符写入
  2. write(String str):直接整段字符串写入(比字节流省事百倍)
  3. write(char[] cs):字符数组批量写入

FileReader 文件字符输入流

两个 read 方法:

  1. read():读取单个字符,末尾返回 - 1
  2. read(char[] cs):批量读取字符进数组,返回读取长度

四、字符过滤流,文本开发神器

1. BufferedReader 缓冲字符读流

王牌方法readLine():一次性读取一整行文本,读到文件末尾返回 null,遍历日志、小说文本标配! 示例标准代码:

java运行

FileReader fr = new FileReader("c.txt"); BufferedReader br = new BufferedReader(fr); while(true){ String line = br.readLine(); if(line == null) break; System.out.println(line); } br.close(); // 只关外层过滤流即可,内层自动释放

2. PrintWriter 打印输出流

开发日志打印、导出文本首选,功能拉满:

  1. 支持 8 大基础数据类型输出
  2. println()自动换行,print()不换行
  3. println(Object obj):自动调用对象 toString,只存文字,不需要序列化接口
  4. 自带缓冲,操作简单易用

五、桥转换流:字节流 ↔ 字符流转换器(解决乱码核心)

InputStreamReader(字节转字符输入)、OutputStreamWriter(字节转字符输出) 核心两大作用:

  1. 打通字节流和字符流,实现互相包装转换
  2. 手动指定读写编码,彻底解决中文乱码问题! 标准使用步骤:
  3. 创建字节节点流(FileInputStream/FileOutputStream)
  4. 套桥转换流,同时指定 UTF-8/GBK 编码
  5. 外层包装 BufferedReader/PrintWriter 增强读写
  6. 只关闭最外层流,底层资源自动释放

六、File 类:专门管理文件 / 文件夹本体(和 IO 流区分开)

核心区别一句话分清

  • IO 流:操作文件里面的内容,读文字、写数据、复制文件
  • File 类:操作文件 / 文件夹外壳本身,创建删除文件、重命名、遍历文件夹,不读写内容

高频常用方法

  • getName():获取文件名(带后缀)
  • getAbsolutePath():获取文件完整绝对路径(开发调试必备)
  • isFile():判断当前对象是不是文件
  • isDirectory():判断是不是文件夹
  • listFiles():获取文件夹下所有子文件、子文件夹数组

递归遍历文件夹筛选.java 文件经典案例

java运行

public static void selectAllEndJava(File file){ File[] fs = file.listFiles(); for(File f : fs){ if(f.isFile()){ String name = f.getName(); if(name.endsWith(".java")){ System.out.println(f.getAbsolutePath()); } }else{ // 文件夹递归继续遍历 selectAllEndJava(f); } } }

逻辑:拿到文件夹所有子项,是文件就判断后缀打印路径;是文件夹就递归深挖。

七、IO 全体系思维导图极简总结

1. 字节流(全能,所有文件)

父类:InputStream / OutputStream

  • 节点流:FileInputStream、FileOutputStream
  • 过滤流:Buffered 缓冲流、Data 基础类型流、Object 对象序列化流

2. 字符流(仅纯文本)

父类:Reader / Writer

  • 节点流:FileReader、FileWriter
  • 过滤流:BufferedReader、PrintWriter
  • 桥转换流:InputStreamReader、OutputStreamWriter(编码转换、字节字符互通)

3. File 类

独立体系,只管理文件外壳,不读写内部内容,递归遍历、增删改文件专用。

收尾碎碎念

日常开发分场景选流:图片视频压缩包用字节缓冲流;日志、txt 文档优先字符 Buffered+PrintWriter;有中文乱码直接上桥转换流指定编码;需要保存对象用 Object 流;批量遍历文件夹文件直接 File 递归。IO 所有流用完必须 close 释放资源,不然长期运行疯狂内存泄漏踩大坑!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 6:48:53

Unity透明窗口技术:如何让应用突破窗口边界?

Unity透明窗口技术:如何让应用突破窗口边界? 【免费下载链接】Unity_TransparentWindowManager Make Unitys window transparent and overlay on desktop. 项目地址: https://gitcode.com/gh_mirrors/un/Unity_TransparentWindowManager 当传统应…

作者头像 李华
网站建设 2026/6/16 6:40:56

文档操作系统:从模板到PDF的自动化工程化实践

1. 项目概述:当模板不再是“套壳”,而是一套可执行的文档操作系统你有没有过这种体验:手头有一篇写得不错的行业分析,想快速变成一份体面的PDF报告发给客户;或者刚录完一期播客,想把文字稿整理成带封面、目…

作者头像 李华
网站建设 2026/6/16 6:40:52

计算机毕业设计之乡村振兴数据的可视化平台

本论文主要论述了如何使用Django框架开发一个乡村振兴数据的可视化平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述乡村振兴数据的可视化平台的当前背景以…

作者头像 李华
网站建设 2026/6/16 6:40:49

AI Agent开发实战⑱|上下文压缩与选择:让LLM看到最有价值的信息

AI Agent开发实战⑱|上下文压缩与选择:让LLM看到最有价值的信息检索到了50篇文档,但LLM的上下文窗口只能塞5篇。选哪5篇?平均选会漏掉关键信息,全塞进去会爆Token。上下文压缩和选择策略就是解决这个矛盾:用…

作者头像 李华
网站建设 2026/6/16 6:36:02

AWS S3 Sync 生产级同步原理与避坑指南

1. 项目概述:这不是一个“命令行小技巧”,而是一套生产级文件同步工作流AWS S3 Sync 是我过去三年在十多个客户现场反复打磨、压测、重构过的核心数据通道。它远不止是aws s3 sync这条命令本身——那是冰山露出水面的十分之一。真正决定成败的&#xff0…

作者头像 李华
网站建设 2026/6/16 6:35:57

机电安装总承包公司

机电安装总承包公司。在现代工程领域,机电安装总承包公司扮演着至关重要的角色。机电安装涵盖了电气、管道、通风等众多系统的安装与调试,对于建筑、工厂等项目的正常运行意义重大。一、机电安装的广泛范畴机电安装涉及建筑机电和工业机电两大方面。建筑…

作者头像 李华