Как написать массив строк в столбце CSV - PullRequest
0 голосов
/ 29 ноября 2018
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

1 Ответ

0 голосов
/ 30 ноября 2018

Решением было написать собственный процессор для сотовых.Я написал процессор 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...