如何用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
相关产品推荐
相关产品推荐

