fileoutputstream写入字节需创建流、写入数据(单字节/数组/指定范围)、关闭流;覆盖写入默认,追加需传true;须处理filenotfoundexception;推荐try-with-resources自动关流;字符串需显式指定utf-8编码转字节数组。

使用 FileOutputStream 写入字节数据是 Java IO 中最基础的操作之一,核心在于创建流、写入字节数组或单个字节、最后关闭流。
创建 FileOutputStream 对象
可以通过文件路径字符串或 File 对象构造。默认情况下,写入会覆盖原文件;若要追加,需传入第二个参数 true:
-
new FileOutputStream("data.bin")—— 覆盖写入 -
new FileOutputStream("data.bin", true)—— 追加写入 - 如果目标目录不存在,会抛出
FileNotFoundException,需确保父目录已存在
写入字节数据的几种方式
支持三种常见写法:
-
write(int b):写入单个字节(只取低 8 位,int值会被截断) -
write(byte[] b):写入整个字节数组 -
write(byte[] b, int off, int len):写入数组中从off开始的len个字节
例如:
byte[] data = {65, 66, 67}; // 对应 "ABC"
fos.write(data); // 一次性写入
务必关闭流并处理异常
FileOutputStream 占用系统资源(如文件句柄),不关闭可能导致资源泄漏或文件被锁定。推荐使用 try-with-resources 自动管理:
- Java 7+ 推荐写法,无需手动调用
close() - 即使发生异常,也会自动释放资源
try (FileOutputStream fos = new FileOutputStream("output.bin")) {
fos.write("Hello".getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
注意字符编码问题
FileOutputStream 是字节流,不关心字符编码。若要写入字符串,必须显式指定编码转换为字节数组:
- 避免直接用
str.getBytes()(依赖平台默认编码,不可靠) - 推荐使用
str.getBytes(StandardCharsets.UTF_8) - 若后续要用
FileInputStream读取文本,两边编码必须一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











