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

FileWriter 详细解析与记忆方法

FileWriter 详细解析与记忆方法

一、FileWriter 核心概念

FileWriter 是 Java 中用于向文件写入字符数据的类,继承自 OutputStreamWriter,属于字符流体系。

1. 核心特点

特性说明
继承关系Writer → OutputStreamWriter → FileWriter
数据单位字符(16位 Unicode)
用途写入文本文件(自动处理字符到字节的转换)(写普通文本用的)
是否缓冲默认无缓冲(需配合 BufferedWriter 使用)
文件处理方式默认覆盖文件,可通过构造方法选择追加模式
编码依赖使用系统默认编码(可能因环境不同导致乱码)

2. 构造方法

java

// 1. 通过文件路径创建(覆盖模式)
FileWriter fw = new FileWriter("output.txt");// 2. 追加模式写入
FileWriter fw = new FileWriter("output.txt", true); // 3. 通过File对象创建
File file = new File("output.txt");
FileWriter fw = new FileWriter(file);// 4. 通过文件描述符创建(较少用)
FileDescriptor fd = new FileDescriptor();
FileWriter fw = new FileWriter(fd);

3. 核心方法

方法作用
void write(int c)写入单个字符
void write(char[] cbuf)写入整个字符数组
void write(char[] cbuf, int off, int len)从数组的off位置写入len个字符
void write(String str)写入整个字符串
void write(String str, int off, int len)从字符串的off位置写入len个字符
void flush()强制将缓冲区内容写入磁盘
void close()

关闭流

void append(String str)追加字符串

二、使用示例

1. 基础写入文件

java

try (FileWriter fw = new FileWriter("output.txt")) {fw.write('A');               // 写入单个字符fw.write("Hello");           // 写入字符串char[] data = {'世', '界'};fw.write(data);              // 写入字符数组
}

2. 追加模式写入

java

try (FileWriter fw = new FileWriter("log.txt", true)) { // 追加模式fw.write("新的日志内容\n");
}

3. 高效写入(缓冲流)

java

try (BufferedWriter bw = new BufferedWriter(new FileWriter("large.txt"))) {bw.write("第一行内容");bw.newLine();                // 换行bw.write("第二行内容");
}

4. 指定编码写入(间接实现)

java

// 通过OutputStreamWriter指定编码
try (Writer writer = new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8")) {writer.write("中文内容");
}

三、记忆技巧

1. 名称解析法

"File + Writer"

  • File:操作文件

  • Writer:字符输出流

2. 对比记忆法

对比类方向数据单位编码处理典型用途
FileWriter写入字符系统默认编码写入系统默认编码的文本
OutputStreamWriter写入字符可指定编码(如UTF-8)需要明确编码的文本写入
FileOutputStream写入字节无编码处理二进制文件写入

3. 使用场景联想

  • 日志记录FileWriter + 追加模式

  • 配置文件生成:按行写入配置项

  • 数据导出:将程序数据导出为CSV/JSON文本

4. 常见误区提醒

❌ 错误用法:用 FileWriter 写入非默认编码文本
✅ 解决方案

java

// 明确指定编码
new OutputStreamWriter(new FileOutputStream("file.txt"), "UTF-8");

四、面试高频问题

1. FileWriter 和 FileOutputStream 的区别?

  • FileWriter:按字符写入(自动编码转换),适合文本

  • FileOutputStream:按字节写入,适合二进制数据

2. 如何保证写入内容立即生效?

  • 调用 flush() 方法强制刷盘:

    java

fw.write("重要内容");
fw.flush(); // 确保数据写入磁盘

3. 为什么需要 close() 或 try-with-resources?

  • 释放资源:操作系统文件句柄

  • 确保写入:缓冲数据可能尚未写入磁盘

4. 大文件写入如何优化性能?

java

// 使用缓冲流减少IO操作次数
try (BufferedWriter bw = new BufferedWriter(new FileWriter("big.txt"))) {for (int i = 0; i < 100000; i++) {bw.write("数据行" + i);bw.newLine();}
}

五、总结图示

mermaid

flowchart TDA[FileWriter] --> B[写入文本文件]A --> C[自动字符编码转换]A --> D[需配合缓冲流提升性能]B --> E[日志/配置文件等]D --> F[BufferedWriter]

一句话总结
"FileWriter写文本,默认编码要留神,缓冲写入效率高,记得关闭或flush"

掌握这些知识点后,文本文件写入将变得得心应手! 🚀

相关文章:

  • 用 Deepseek 写的uniapp血型遗传查询工具
  • VRoid-Blender-Unity个人工作流笔记
  • 相机内外参
  • 苍穹外卖3
  • 某车企面试备忘
  • 打造AI应用基础设施:Milvus向量数据库部署与运维
  • PyTorch梯度:深度学习的引擎与实战解析
  • Git报错remote: Verify fatal: Authentication failed for ***
  • 比特币不是solidity编写吗,比特币不是基于 Solidity
  • 【项目管理】第15章 项目风险管理-- 知识点整理
  • ASP.NET Core 性能优化:分布式缓存
  • ubunut24.04 bash和zsh同时使用conda
  • cocosCreator安卓隐私弹窗(链接版)
  • (二十四)安卓开发中的AppCompatActivity详解
  • QML ListView:列表视图的数据交互与样式定制
  • UnityUI:Canvas框架获取鼠标悬浮UI
  • CExercise_05_1伪随机数_2编写程序模拟掷骰子的游戏(每一次投掷,都投掷两个骰子)
  • RocketMQ 03
  • 【中大厂面试题】腾讯云 java 后端 最新面试题
  • win10win11启用组策略编辑器
  • 王毅会见巴西外长维埃拉、总统首席特别顾问阿莫林
  • 60余年产业积累,“江苏绿心”金湖炼就“超级石油工具箱”
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表
  • 何立峰:中方坚定支持多边主义和自由贸易,支持世贸组织在全球经济治理中发挥更大作用
  • 英国和美国就关税贸易协议条款达成一致
  • 丰田汽车:美国关税或导致4、5月损失1800亿日元,新财年净利润下滑三成