当前位置: 首页 > news >正文

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

1.文件内容操作

java 提供了一系列类表示流对象

1)字节流:以字节为基本单位进行读写

2)以字符为基本单位进行读写

2.⽂件内容的读写⸺字节流

字节流的核心类

2.1InputStream

InputStream 是抽象类,无法创建出"具体的" 实例. 抽象类会有抽象方法,没有定义,只有声明.抽象类存在的意义,就是为了被扩展(继承)

上述抽象类, 在标准库里已经被创建好了子类,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 同样只是⼀个抽象类,要使⽤还需要具体的实现类。我们现在还是只关⼼写⼊⽂中,所以使⽤FileOutputStream

FileOutputStream

方法

修饰符及返回值类型
⽅法签名说明
voidwrite(int b)写⼊要给字节的数据
voidwrite(byte[] b)

将 b 这个字符数组中的数据全部写

⼊ os 中int

void

write(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 FileReader

Writer FileWriter

类似字节流

1)打开文件

2)读/写(字符为单位)

3)关闭(通过try with resource)

http://www.jsqmd.com/news/1374639/

相关文章:

  • 乌鲁木齐抖音公会演出许可证全包加急代办哪家好 - 产品推荐官
  • 从现象定位风控:0 播放、低流量池、频繁人机验证,背后平台风控信号全拆解
  • 计算机毕业设计之 基于spring boot的快递管理系统
  • xone社区贡献指南:如何参与Xbox设备驱动开发与测试
  • 随着餐饮行业数字化转型的深入推进,扫码点餐已从“可选配置”变为“刚需标配”。
  • Spring Boot i18n 国际化实战:从资源文件到多语言接口完整指南
  • 为什么选择xone?Linux下Xbox配件驱动的革命性替代方案
  • video-to-pose3D常见问题解答:解决安装、运行与结果异常的完整指南
  • 如何在OBS Studio中实现专业级色彩校正:3D LUT功能深度解析
  • RStartHere runners-up深度分析:这些优秀R包为何未能入选?
  • 永洁净化工程|5260㎡能源实验室洁净车间防爆 EPC 总包案例 - 产品推荐官
  • 如何解决OpenArk内核模式加载失败的技术迷宫
  • 南宁六一亲子活动推荐 - 商业科技观察
  • tmate-ssh-server源码解析:从认证流程到通道管理的实现细节
  • gh_mirrors/jwt5/jwt异步操作教程:signAsync与verifyAsync的高效应用
  • 如何在Emacs中优雅阅读电子书?nov.el快速上手指南
  • 大厂 MCP 面试实录:基于 Python SDK 构建可复用 Prompts 工作流与权限审计方案
  • 2026年7月南京公司注册流程详细步骤是什么? - 远朝财税
  • Letmeask部署指南:从本地开发到Firebase Hosting上线全流程
  • 技术社区专家坐诊:高效解决开发疑难杂症
  • IPD咨询洞察:华为规模破万亿后,为何死磕“以项目为中心”?
  • STM32标准库移植,STM32F103C8T6为例
  • 开发者视角:GDriveFS的FUSE实现原理与代码架构分析
  • 南京大型鱼缸定制厂家电话13767081333 - 滚动商讯
  • 解决emacs-format-all-the-code常见问题:格式化失败、找不到工具等难题一网打尽
  • 三单回本模式商城小程序开发
  • libiec61850:开源IEC 61850协议栈的工业级实现与应用指南
  • DPJ-445基于STM32单片机wifi智能嵌入式洗碗机
  • Electra vs 传统越狱:KPPLess技术如何彻底改变iOS越狱生态
  • 解决Teams应用开发痛点:Teams SDK Doctor诊断工具使用指南