You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache Commons CSV写入带UTF-8 BOM的Excel格式CSV文件?

解决方案:Java写入带UTF-8 BOM的CSV文件(结合Apache Commons工具)

当然支持写入带UTF-8 BOM的文件啦!你提到Apache Commons IO只有BOMInputStream,其实它还有对应的BOMOutputStream类可以用来写BOM,另外也可以手动写入BOM头,结合Apache Commons CSV轻松完成需求。下面给你两种实用方案:

方案一:手动写入UTF-8 BOM头 + Apache Commons CSV

UTF-8 BOM本质就是三个固定字节:0xEF, 0xBB, 0xBF,我们可以先把这三个字节写入文件开头,再用Commons CSV写入具体内容。

示例代码:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class CsvWithBomWriter {
    public static void main(String[] args) throws Exception {
        File csvFile = new File("output_with_bom.csv");
        
        // 1. 先写入UTF-8 BOM头
        try (FileOutputStream fos = new FileOutputStream(csvFile)) {
            fos.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});
            
            // 2. 用Commons CSV写入内容
            try (OutputStreamWriter writer = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
                 CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("列1", "列2", "列3"))) {
                
                printer.printRecord("内容1", "内容2", "内容3");
                printer.printRecord("中文测试", "UTF-8", "BOM");
            }
        }
    }
}

方案二:使用Apache Commons IO的BOMOutputStream(更优雅)

Commons IO其实提供了BOMOutputStream,它可以自动为输出流添加指定编码的BOM,不用手动处理字节,代码更简洁:

示例代码:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.io.output.BOMOutputStream;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class CsvWithBomWriter {
    public static void main(String[] args) throws Exception {
        // 用BOMOutputStream包装输出流,指定UTF-8编码
        try (FileOutputStream fos = new FileOutputStream("output_with_bom.csv");
             BOMOutputStream bomOs = new BOMOutputStream(fos, StandardCharsets.UTF_8);
             OutputStreamWriter writer = new OutputStreamWriter(bomOs, StandardCharsets.UTF_8);
             CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("列1", "列2", "列3"))) {
            
            printer.printRecord("内容1", "内容2", "内容3");
            printer.printRecord("中文测试", "UTF-8", "BOM");
        }
    }
}

注意事项

  • 确认你的Apache Commons IO版本足够新(至少2.4+,BOMOutputStream是在2.4版本加入的)
  • Excel识别UTF-8 CSV时依赖BOM,这种写法能确保Excel打开不会出现乱码问题
  • 如果你用的是旧版Commons IO没有BOMOutputStream,方案一的手动写入方式完全兼容所有版本

内容的提问来源于stack exchange,提问作者6H057845H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:56