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

FileInputStream 和 FileOutputStream 简介

FileInputStream 和 FileOutputStream 是 Java 中用于读写文件的字节流类,属于 java.io 包。FileInputStream 用于从文件中读取字节数据,FileOutputStream 用于将字节数据写入文件。两者适用于二进制文件(如图片、音频等)或文本文件的底层操作。


FileInputStream 使用方法

创建 FileInputStream

通过文件路径或 File 对象创建 FileInputStream:

FileInputStream fis = new FileInputStream("example.txt");  // 通过文件路径
// 或
File file = new File("example.txt");
FileInputStream fis = new FileInputStream(file);  // 通过 File 对象

读取文件数据

使用 read() 方法逐字节读取,返回 -1 表示文件结束:

int data;
while ((data = fis.read()) != -1) {System.out.print((char) data);  // 转换为字符输出
}

批量读取

通过字节数组提高读取效率:

byte[] buffer = new byte[1024];  // 缓冲区大小
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {String content = new String(buffer, 0, bytesRead);  // 转换为字符串System.out.print(content);
}

关闭流

使用完成后必须关闭流以释放资源:

fis.close();

使用 try-with-resources 自动关闭

推荐使用 try-with-resources 语法,避免手动关闭:

try (FileInputStream fis = new FileInputStream("example.txt")) {// 读取操作
} catch (IOException e) {e.printStackTrace();
}


FileOutputStream 使用方法

创建 FileOutputStream

通过文件路径或 File 对象创建,可指定是否追加模式:

FileOutputStream fos = new FileOutputStream("output.txt");  // 覆盖模式
// 或追加模式
FileOutputStream fos = new FileOutputStream("output.txt", true);  

写入数据

使用 write() 方法写入单个字节或字节数组:

// 写入单个字节
fos.write('A');  // 写入字节数组
byte[] data = "Hello, World!".getBytes();
fos.write(data);  

批量写入

通过字节数组批量写入:

String content = "Hello, Java!";
byte[] bytes = content.getBytes();
fos.write(bytes, 0, bytes.length);  // 指定偏移量和长度

关闭流

写入完成后关闭流:

fos.close();

使用 try-with-resources 自动关闭
try (FileOutputStream fos = new FileOutputStream("output.txt")) {fos.write("Hello".getBytes());
} catch (IOException e) {e.printStackTrace();
}


综合示例:文件复制

结合 FileInputStream 和 FileOutputStream 实现文件复制:

try (FileInputStream fis = new FileInputStream("source.txt");FileOutputStream fos = new FileOutputStream("target.txt")) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fis.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}
} catch (IOException e) {e.printStackTrace();
}


注意事项

  1. 异常处理:必须处理 IOException,如文件不存在或无权限访问。
  2. 资源释放:确保流被关闭,推荐使用 try-with-resources。
  3. 性能优化:使用缓冲区(字节数组)减少 IO 操作次数。
  4. 字符编码:直接处理字节时需注意字符编码问题,文本文件建议使用字符流(如 FileReader/FileWriter)。

常见问题

如何读取大文件?

分块读取并处理,避免内存溢出:

byte[] buffer = new byte[8192];  // 8KB 缓冲区
while ((bytesRead = fis.read(buffer)) != -1) {// 处理每一块数据
}

如何追加内容到文件?

创建 FileOutputStream 时设置 append 参数为 true

FileOutputStream fos = new FileOutputStream("log.txt", true);

http://www.dtcms.com/a/310149.html

相关文章:

  • ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令
  • 便携式综合气象观测仪:随时随地 “捕捉” 天气变化
  • PaddleOcr转onnx和推理
  • python:前馈人工神经网络算法之实战篇,以示例带学,弄明白神经网络算法应用的思路、方法与注意事项等
  • 高斯透镜公式(调整镜头与感光元件之间的距离时,使得不同距离的物体在感光元件上形成清晰的影像)
  • 企业级LLM智能引擎 的完整解决方案,整合了 SpringAI框架、RAG技术、模型控制平台(MCP)和实时搜索,提供从架构设计到代码实现的全面指南:
  • 【iOS】retain/release底层实现原理
  • Java 日期时间格式化模式说明
  • PTE之路--01
  • vivado扫盲 out-of-context(腾讯元宝)
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)
  • Android Material Components 全面解析:打造现代化 Material Design 应用
  • 数据处理四件套:NumPy/Pandas/Matplotlib/Seaborn速通指南
  • 如何在不依赖 Office 的情况下转换 PDF 为可编辑文档
  • lesson30:Python迭代三剑客:可迭代对象、迭代器与生成器深度解析
  • Redis 数据结构全景解析
  • Linux内核构建系统中的auto.conf与autoconf.h:原理与作用解析
  • 3D 管道如何实现流动的?
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的疗养院管理系统(附源码+数据库+毕业论文+远程部署)
  • cesium FBO(三)渲染到Canvas(灰度图效果)
  • 【OneAPI】网页搜索API和网页正文提取API
  • Lombok常用注解及功能详解
  • oracle的安全加密有哪些?
  • Python文件对比利器:filecmp模块详解
  • 学习嵌入式第十七天
  • Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)
  • 10.Linux 用户和组的管理
  • 【HL7】.aECG与.hl7文件的关系和区别
  • Java滤波去除异常峰值方法(二)
  • CGA匹兹堡睡眠质量指数量表评估睡眠状况​