java - 将每个属性的单个 bean rowise 写入 csv

标签 java csv opencsv

我正在使用 opencsv 并且我有一个模型(假设 Person 具有三个属性 name, age, sex),我想将其存储到csv 文件。

它应该如下所示:

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

第一列包含属性名称,第二列包含值(如键值对)。

我的实现如下所示:

writer = new FileWriter("./settings.csv");

StatefulBeanToCsvBuilder<Person> beanToCsv = new StatefulBeanToCsvBuilder<SettingsModel>(writer);
StatefulBeanToCsv<SettingsModel> beanWriter = beanToCsv.build();
beanWriter.write(model);
writer.close();

我知道 beanToCsv 上有一些可用的设置,但我不知道如何设置。

如果可能的话? 感谢您的帮助:)

最佳答案

StatefulBeanToCsv 具有将 bean 序列化为表格格式的标准方式。

您真正想要的是将 bean 扁平化为键值对。所以技巧应该使用 BeanMap保存 Person bean 数据。由于 Person bean 没有嵌套对象,我们可以简单地将其转换为 ValueHolder.key 和 ValueHolder.value。

最终应用这个策略ColumnPositionMappingStrategy这样:

ColumnPositionMappingStrategy<ValueHolder> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(ValueHolder.class);
strategy.setColumnMapping("key", "value");
FileWriter writer = new FileWriter("./settings.csv");
StatefulBeanToCsvBuilder<ValueHolder> csvBuilder = new StatefulBeanToCsvBuilder<>(writer);
StatefulBeanToCsv<ValueHolder> beanWriter = csvBuilder.withSeparator(';').withMappingStrategy(strategy).build();
beanWriter.write(content);
writer.close();

可以访问完整的工作示例 here .

关于java - 将每个属性的单个 bean rowise 写入 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50018101/

相关文章:

java - Spring 的静态 util 类,不确定是否应该将其设为 SpringBean,设计问题

java - 向标准 ArrayList 添加元素与自定义 ArrayList

java - org.apache.camel :camel-maven-plugin is missing (Windows 10)

c - 在 C 中读取 csv 文件的不同列

java - 编辑 CSV 文件(设计实现)

java - OpenCSV 解析不显示特殊字符

java enum ArrayList - 这可能吗?

javascript - 在 NodeJS 中将大 XLSX(超过 600MB)解析/转换为 CSV

mySQL >> 在逗号分隔的字段中查找最常用的词

java - 将解析的 CSV 文件插入 SQL Server