【问题标题】:how to write String array in a csv column如何在 csv 列中写入字符串数组
【发布时间】:2019-05-01 20:17:27
【问题描述】:
public class bean {
  private String name;
  private String[] friends;
}

public void createSuperCSVFile(final List<VariantTO> data,
                               final File file) throws IOException {
    ICsvBeanWriter beanWriter = null;
    try {
        String[] header = {"name", "friends"};
        beanWriter = new CsvBeanWriter(new FileWriter(file), TAB_PREFERENCE);
        // write the header
        beanWriter.writeHeader(header);

        for (Object object: data) {
            beanWriter.write(object, header);
        }
    } finally {
        if( beanWriter != null ) {
            beanWriter.close();
        }
    }
}

我正在使用 supercsv 编写一个 POJO,其属性包含字符串数组到 csv。 CsvBeanWriter 只是在列中写入对象地址而不是其值。是否有任何设置可以正确映射值?

EXPECTED
name    friends
john    dimitry,olaf,nett

ACTUAL
name    friends
john    [Ljava.lang.String;@50ccb5a3

【问题讨论】:

    标签: java file csv supercsv


    【解决方案1】:

    解决方案是编写我自己的单元处理器。我写了一个 String[] 处理器,它返回一个逗号分隔的值作为一个字符串。

    final CellProcessor[] PROCESSORS = new CellProcessor[] {
        new NotNull(),
        new ParseStringArray()
    };
    
    beanWriter = new CsvBeanWriter(new FileWriter(file), TAB_PREFERENCE);
    
    for (Object object: data) {
        beanWriter.write(object, header, PROCESSORS);
    }
    
    
    class ParseStringArray extends CellProcessorAdaptor implements StringCellProcessor {
        @Override
        public <T> T execute(final Object value, final CsvContext context) {
            validateInputNotNull(value, context);
            String result;
            if (value instanceof String[]) {
                result = StringUtils.join((String[]) value, ",");
            } else {
                final String actualClassName = value.getClass().getName();
                throw new SuperCsvCellProcessorException(String.format(
                    "the input value should be of type String array but is of type %s", actualClassName), context, this);
            }
    
            return next.execute(result, context);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多