代码之家  ›  专栏  ›  技术社区  ›  Theiaz

将每个属性的单个bean行写入csv

  •  1
  • Theiaz  · 技术社区  · 8 年前

    我使用的是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 但我不知道怎么做。

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

    1 回复  |  直到 8 年前
        1
  •  4
  •   Lau Ka Fai    8 年前

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

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

    最终应用此策略 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