java对象的CSV文件结构

时间:2015-06-19 03:44:59

标签: java csv

我想要Order个对象的CSV格式。我的Order对象的订单为detailsorder line detailsitem details。请在下面找到java对象:

Order {
    OrderNo, OrderName, Price,
    OrderLine {
              OrderLineNo, OrderLinePrice,
             Item{
                  ItemNo, ItemName, Item Description
             }
    }
}

任何人都可以指导我为此创建csv格式。

2 个答案:

答案 0 :(得分:0)

为您要为其创建CSV文件的Object创建一个POJO类,并使用java.io.FileWriter在csv文件中写入/追加值。这个elasticsearch-http-basic plugin将为您提供帮助。

答案 1 :(得分:0)

如果您有冒险精神,我会在uniVocity-parsers中为CSV中的嵌套元素构建支持。

2.0.0-SNAPSHOT版本支持使用注释解析嵌套bean。我们计划在几周内发布最终版本。编写支持尚未实现,因此您必须手动完成该部分(使用当前API应该相当容易)。

解析这种结构更复杂,但解析器似乎在大多数情况下都能正常工作。看看那个测试用例:

输入CSV:

1,Foo
Account,23234,HSBC,123433-000,HSBCAUS
Account,11234,HSBC,222343-130,HSBCCAD
2,BAR
Account,1234,CITI,213343-130,CITICAD

请注意,每行的第一列标识将读取哪个bean。作为"客户"在CSV中匹配班级名称,您不需要注释

<强>的POJO

enum ClientType {
    PERSONAL(2),
    BUSINESS(1);

    int typeCode;

    ClientType(int typeCode) {
        this.typeCode = typeCode;
    }
}

public static class Client {
    @EnumOptions(customElement = "typeCode", selectors = { EnumSelector.CUSTOM_FIELD })
    @Parsed(index = 0)
    private ClientType type;

    @Parsed(index = 1)
    private String name;

    @Nested(identityValue = "Account", identityIndex = 0, instanceOf = ArrayList.class, componentType = ClientAccount.class)
    private List<ClientAccount> accounts;
}

public static class ClientAccount {
    @Parsed(index = 1)
    private BigDecimal balance;
    @Parsed(index = 2)
    private String bank;
    @Parsed(index = 3)
    private String number;
    @Parsed(index = 4)
    private String swift;
}

解析输入的代码

public void parseCsvToBeanWithList() {
    final BeanListProcessor<Client> clientProcessor = new BeanListProcessor<Client>(Client.class);

    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.setRowProcessor(clientProcessor);

    CsvParser parser = new CsvParser(settings);
    parser.parse(new StringReader(CSV_INPUT));

    List<Client> rows = clientProcessor.getBeans();
}

如果您在使用解析器时发现任何问题,请发送更新this issue