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

如何用OpenCSV将单个Bean按属性以键值对格式写入CSV文件

使用OpenCSV实现Person模型的键值对格式CSV写入

我明白你想要用OpenCSV把Person对象写成特定的键值对格式CSV——每个属性名和对应值成对出现,用分号分隔,还得带双引号对吧?默认的OpenCSV Bean映射逻辑满足不了这个需求,我给你两个可行的实现方案,其中第一种更直接好懂:

方案一:手动构建CSV行(推荐)

这种方式直接按照你想要的格式拼接字段,逻辑清晰,容易调整:

1. 先定义Person模型

确保有对应的getter方法,方便获取属性值:

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    // 必须的getter方法
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getSex() { return sex; }
}

2. 写入CSV的核心代码

我们直接用CSVWriter手动构建每行的键值对字段,指定分号作为分隔符,并且给每个字段手动添加双引号:

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PersonCsvWriter {
    public static void main(String[] args) {
        // 示例Person对象
        Person person = new Person("Jon", 30, "male");

        try (CSVWriter writer = new CSVWriter(
                new FileWriter("./settings.csv"),
                ';', // 设置分隔符为分号
                CSVWriter.NO_QUOTE_CHARACTER, // 我们手动加引号,所以这里禁用自动引号
                CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                CSVWriter.DEFAULT_LINE_END
        )) {
            // 构建键值对字段列表
            List<String> rowFields = new ArrayList<>();
            rowFields.add("\"name\"");
            rowFields.add("\"" + person.getName() + "\"");
            rowFields.add("\"age\"");
            rowFields.add("\"" + person.getAge() + "\"");
            rowFields.add("\"sex\"");
            rowFields.add("\"" + person.getSex() + "\"");

            // 写入一行
            writer.writeNext(rowFields.toArray(new String[0]));
            System.out.println("CSV文件已成功写入");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行后生成的settings.csv内容就是你期望的:

"name";"Jon";"age";"30";"sex";"male"

如果需要写入多个Person对象,只需要循环遍历对象列表,重复构建rowFields并调用writeNext即可。

方案二:自定义Bean映射策略(进阶)

如果你想坚持用StatefulBeanToCsv的方式,需要自定义映射策略,但相对复杂一些。核心思路是给每个属性定义两个虚拟列(键和值),不过因为原Person类没有这些虚拟属性,需要额外处理,所以更推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:38