文件读写:字节流与字符流详解 (文件io)

发布时间:2026/10/1 10:14:44

文件读写:字节流与字符流详解 (文件io) 1.文件内容操作java 提供了一系列类表示流对象1)字节流:以字节为基本单位进行读写2)以字符为基本单位进行读写2.⽂件内容的读写⸺字节流字节流的核心类2.1InputStreamInputStream 是抽象类,无法创建出具体的 实例. 抽象类会有抽象方法,没有定义,只有声明.抽象类存在的意义,就是为了被扩展(继承)上述抽象类, 在标准库里已经被创建好了子类,FileInputStream.从文件中读取数据FileInputStream构造方法签名说明FileInputStream(File file)利⽤ File 构造⽂件输⼊流FileInputStream(String name)利⽤⽂件路径构造⽂件输⼊流方法修饰符及返回值类型⽅法签名说明intread()读取⼀个字节的数据返回 -1 代表已经完全读完了intread(byte[] b)最多读取 b.length 字节的数据到 b中返回实际读到的数量-1 代表以及读完了intread(byte[] b, int off, int len)最多读取 len - off 字节的数据到 b 中放在从 off 开始返回实际读到的数量-1 代表以及读完了voidclose()关闭字节流代码示例import java.io.FileInputStream; import java.io.IOException; //使用字节流 public class demo { public static void main(String[] args) throws IOException { FileInputStream inputStream new FileInputStream(./1.txt); //通过 read 方法读取数据 while (true){ int data inputStream.read(); if(data-1){ //读到文件末尾 break; } //打印数据 System.out.printf(%x\n,data); } while(true){ byte[] bytes new byte[1024]; int n inputStream.read(bytes); if(n-1){ break; } for (int i 0; i n; i) { System.out.printf(0x%X\n,bytes[i]); } } //关闭文件 inputStream.close(); } }计算机中,读取硬盘,比读取内存,更低效.一次读一个字节,分N次读完(多次硬盘操作). 一次读NG字节,一次读完(一次硬盘读取) 效率可能差异很大~~try-with-resources 语法import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class demo8 { public static void main(String[] args) { try(InputStream inputStream new FileInputStream(./1.txt)){ while(true){ byte[] bytes new byte[1024]; int n inputStream.read(bytes); if(n-1){ break; } for (int i 0; i n; i) { System.out.printf(0x%x\n,bytes[i]); } } //close 不必写了 //会在try 结束的时候,自动调用 }catch (IOException e){ e.printStackTrace(); } } }try-with-resources语法要求写在括号里的资源需要实现 AutoCloseable 或 Closeable 接口FileInputStream 满足该条件无论 try 代码块正常运行结束还是中途抛出异常终止系统都会自动调用资源的 close () 方法关闭流无需我们在 finally 中手动编写关闭流的代码既简化了代码又能避免因忘记关闭流引发的文件资源占用与内存泄漏问题。2.2 OutputStream和InputStream类似OutputStream 同样只是⼀个抽象类要使⽤还需要具体的实现类。我们现在还是只关⼼写⼊⽂中所以使⽤FileOutputStreamFileOutputStream方法修饰符及返回值类型⽅法签名说明voidwrite(int b)写⼊要给字节的数据voidwrite(byte[] b)将 b 这个字符数组中的数据全部写⼊ os 中intvoidwrite(byte[] b, int off,int len)将 b 这个字符数组中从 off 开始的数据写⼊ os 中⼀共写 len 个voidclose()关闭字节流voidflush()代码示例import javax.imageio.IIOException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class demo9 { public static void main(String[] args) { try(OutputStream outputStream new FileOutputStream(./1.txt)){ outputStream.write(97); outputStream.write(98); outputStream.write(99); }catch (IIOException e){ e.printStackTrace(); } catch (IOException e) { throw new RuntimeException(e); } } }默认情况下, 使用OutputStream 打开文件,就会清空文件内容(操作系统原生api就是这样的)OutputStream outputStream new FileOutputStream(./1.txt,true)追加写,来解决3.⽂件内容的读写⸺字符流Reader FileReaderWriter FileWriter类似字节流1)打开文件2)读/写(字符为单位)3)关闭(通过try with resource)
延伸阅读

更多相关文章

2026/9/30 18:13:12

import 来 import 去就报错了?

📋 本期菜单:循环导入 init.py 过度初始化 import * 污染 相对导入失败 模块级副作用 reload 陷阱 name 守护 毛毛姐的项目从单文件长成了多模块。她把代码拆成了 fans.py、stats.py、main.py,觉得结构清晰多了。 然后 python main.py 一跑——ImportError: cannot …

2026/9/24 2:52:04

第1课:从技术到管理——为什么情绪能力决定你的天花板

周一早上九点,陈磊盯着团队周报,眉头越拧越紧。三个需求延期,两个bug没修,新人小王上周提的代码还是老样子。他深吸一口气,把所有人叫到会议室,逐条过问——“这个为什么没做完?”“这个怎么又出…

2026/9/29 6:18:02

应对AI Token成本危机:开源模型本地部署实战指南

这次我们来看一个正在影响所有AI开发者和企业的现实问题:Token消耗危机。这不是一个具体的开源项目,而是一个普遍存在的成本挑战。随着企业大规模部署AI应用,调用大模型API产生的Token费用正以惊人的速度增长,成为技术团队预算中不…

2026/10/1 10:11:44

TIA Portal工程方法论:从博图安装到PROFINET通讯全解析

1. 这不是一款“装上就能用”的软件,而是一套工业自动化工程方法论的数字载体西门子博图软件——准确说是TIA Portal(Totally Integrated Automation Portal),它根本不是传统意义上“点开就编程”的PLC开发工具。我带过几十个从电…

2026/10/1 10:11:44

Double Commander 双栏文件管理:把 F5/F6 用到极致

Double Commander 双栏文件管理器实战:批量重命名与压缩包即文件夹 文件整理的效率差距不在手速,在工具形态:资源管理器一窗一地来回切,双栏管理器"左栏看、右栏放"一步到位。Double Commander(开源 GPL-2&…

2026/10/1 10:11:44

核心语法-流程控制语句

一、条件判断1、if语句基本格式相关代码2、if进阶(if-else)3、if进阶(if elif else)elif在整个结构中可以出现多次4 、if的嵌套同一套if else 要保证缩进相同二、模式匹配三、循环1 、while循环2、 for循环案例:如何获取指定范围的数据集?使用range语句相…

2026/10/1 10:11:44

Editor打包系统架构设计:声明式打包与模块化编辑器构建实践

1. 从“Editor打包系统”说起:这个架构到底在解决什么问题第一次接触“Editor打包系统”这个概念,很多人会下意识地把它和某个具体的编辑器软件绑定在一起,比如代码编辑器、图像编辑器或者游戏编辑器。但如果你真的在项目里做过编辑器相关的工…

2026/10/1 10:06:44

Android dumpsys 原理与实战:系统服务调试与性能排查

1. 先弄清 dumpsys 到底解决哪一类问题如果你在 Android 开发或系统维护这条线上待过一段时间,dumpsys这个名字大概率会出现在某个焦头烂额的时刻:应用莫名其妙被杀、界面卡成幻灯片、电量一晚上掉 30%、某个服务卡死不响应,logcat里翻来翻去…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑