2015-06-19 4 views
0

Я хочу формат CSV для Order объектов. Мой Order Объект будет иметь заказ details, order line details и item details. Пожалуйста, найдите java-объект ниже:CSV файловая структура для объекта java

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

Может ли кто-нибудь указать мне, чтобы создать формат csv для этого.

+0

Как насчет этих столбцов: OrderNo, OrderNa me, Цена, OrderLineNo, OrderLinePrice, ItemNo, ItemName, ItemDescription? Или я что-то упускаю? – Benj

+0

Вы правы, но что, если есть несколько OrderLines и Items? – user932205

+0

Вам нужно будет дублировать много данных, если вы хотите простую плоскую структуру. –

ответ

0

У вас есть класс POJO для вашего объекта, для которого вы хотите создать CSV-файл, и используйте java.io.FileWriter для записи/добавления значений в файл csv. Этот Java-code-geek Link поможет вам в этом.

+0

Не очень полезно. В образце класс имеет только примитивы как переменные класса. –

0

Если вы чувствуете себя авантюрно, я строю поддержку вложенных элементов в CSV в uniVocity-parsers.

Версия 2.0.0-SNAPSHOT поддерживает разбор вложенных бобов с аннотациями. Мы планируем выпустить финальную версию через пару недель. Поддержка написания еще не реализована, так что вам придется делать вручную (это должно быть довольно легко с использованием текущего API).

Разбор такой структуры сложнее, но в большинстве случаев анализатор работает нормально. Взгляните на этот тестовый пример:

Input CSV:

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

Обратите внимание, что первый столбец каждой строки указано, какой компонент будет читаться. Как "Клиент" в CSV совпадает с именем класса, вам не нужно аннотировать

Pojos

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

Смежные вопросы