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

使用jackson-dataformat-csv写入CSV文件如何去除末尾空行

解决方案

问题原因

末尾空行是Jackson CSV的默认写入逻辑导致:你通过withLineSeparator设置的行分隔符,会在每一条记录(包含表头、最后一条数据行)的末尾都自动追加,最终文件末尾就会多出来一个换行符,打开时显示为空行。

解决方法

方法1:官方配置关闭末尾换行(推荐,适用于jackson-dataformat-csv 2.10及以上版本)

Jackson 2.10版本新增了CsvGenerator.Feature.WRITE_TRAILING_LINE_END配置项,默认开启,关闭后就不会在最后一行末尾追加行分隔符,修改后的代码如下:

public static void writeAccountToFile(List<Map<String, Object>> list, String filePath) {
    System.out.println("Write data to csv file start");
    Writer writer = null;
    try {
        File file = new File(filePath);
        writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
        CsvSchema schema = null;
        CsvSchema.Builder schemaBuilder = CsvSchema.builder();
        if (list != null && !list.isEmpty()) {
            for (String col : list.get(0).keySet()) {
                schemaBuilder.addColumn(col);
            }   
        } else {
              schemaBuilder.addColumn("test1");
              schemaBuilder.addColumn("test2");
        }
        schema = schemaBuilder.build().withLineSeparator("\r").withHeader();
        CsvMapper mapper = new CsvMapper();
        mapper.configure(CsvGenerator.Feature.STRICT_CHECK_FOR_QUOTING, true);
        // 新增配置:关闭最后一行末尾的换行符写入
        mapper.configure(CsvGenerator.Feature.WRITE_TRAILING_LINE_END, false);
        mapper.writer(schema).writeValues(writer).writeAll(list);
        writer.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (writer != null) {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

方法2:低版本兼容方案

如果你使用的Jackson版本低于2.10,无法使用上述配置,可以在写入完成后,手动截断文件末尾的行分隔符,补充逻辑如下:

// 原有writeAll执行、flush完成后,添加以下代码
writer.close();
String lineSeparator = "\r";
RandomAccessFile raf = new RandomAccessFile(file, "rw");
// 仅当文件长度大于分隔符长度时才截断
if(raf.length() > lineSeparator.length()) {
    raf.setLength(raf.length() - lineSeparator.length());
}
raf.close();

内容的提问来源于stack exchange,提问作者Hanh Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:01