Java中 OutputStreamWriter 怎么结合 FileOutputStream 导出 CSV 文件

轻浩小哥_5480

轻浩小哥_5480

2026-07-31

684人浏览

原创

outputstreamwriter结合fileoutputstream导出csv文件的核心是:1.用fileoutputstream写入字节,outputstreamwriter显式指定utf-8编码(推荐standardcharsets.utf_8)避免乱码;2.按csv规则转义字段(逗号、换行、双引号需包裹并转义),每行末用write("\n")换行;3.套bufferedwriter提升性能,配合try-with-resources确保flush和close;4.解决excel中文乱码可加utf-8 bom(\ufeff)或引导用户导入时选utf-8编码。

java中 outputstreamwriter 怎么结合 fileoutputstream 导出 csv 文件

OutputStreamWriter 结合 FileOutputStream 导出 CSV 文件,核心是用 FileOutputStream 提供底层字节流,再用 OutputStreamWriter 做字符编码转换(比如 UTF-8),最后通过 BufferedWriter 或直接 write() 写入 CSV 格式文本。

1. 创建带编码的 OutputStreamWriter

FileOutputStream 负责写入文件字节,但不处理字符编码;OutputStreamWriter 作为桥梁,把字符串按指定编码转成字节。务必显式指定编码(如 "UTF-8"),避免中文乱码。

  • 不要依赖平台默认编码(如 Windows 的 GBK),否则导出的 CSV 在其他系统可能打不开
  • 推荐写法:new OutputStreamWriter(new FileOutputStream("data.csv"), StandardCharsets.UTF_8)
  • Java 7+ 可直接用 StandardCharsets.UTF_8,比字符串 "UTF-8" 更安全

2. 按 CSV 规则写入数据(注意转义和换行)

CSV 不是简单用逗号拼接。字段含逗号、换行符或双引号时,必须用双引号包裹,且内部双引号要转义为两个双引号("")。

Miller CSV TSV JSON 数据处理器
Miller CSV TSV JSON 数据处理器

Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。

下载
  • 示例:原始值 "张三,研发部" → 写成 "\"张三,研发部\""
  • 推荐封装一个简单的 escapeCsv 方法,对每个字段预处理
  • 每行数据写完后,调用 write("\n") 换行(别用 println,它可能写系统换行符 \r\n,导致 Excel 打开错行)

3. 推荐搭配 BufferedWriter 提升性能

OutputStreamWriter 本身没有缓冲,频繁 write() 效率低。套一层 BufferedWriter,能减少磁盘 I/O 次数,尤其数据量大时明显。

  • 写法:new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.csv"), StandardCharsets.UTF_8))
  • 记得最后调用 flush() 和 close()(或用 try-with-resources 自动关闭)
  • try-with-resources 示例:
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("report.csv"), StandardCharsets.UTF_8))) {
  writer.write("\"姓名\",\"部门\",\"入职日期\"\n");
  writer.write("\"李四\",\"测试组\",\"2023-01-15\"\n");
}

4. 额外提醒:Excel 中文显示问题

即使用了 UTF-8,Excel 默认可能用 ANSI 打开 CSV,导致中文乱码。解决方法有两个:

  • 在 CSV 文件开头写入 UTF-8 BOM(\uFEFF),Excel 会识别为 UTF-8 编码(注意:不是所有程序都兼容 BOM)
  • 更稳妥的方式:导出后,让使用者用 Excel 的「数据 → 从文本/CSV」导入,并手动选 UTF-8 编码
  • BOM 写法示例:writer.write("\uFEFF"); // 放在第一行前
不复杂但容易忽略编码和转义细节。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9477

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6642

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5892

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1044

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

868

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1236

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2489

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19831

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1115

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习