конвертировать список объектов Java в CSV - PullRequest
0 голосов
/ 15 января 2019

У меня есть список объектов со многими значениями в объекте, который поступает из источника XML:

iit.getHomeCurrency().getPrice().toString()

Если я поставлю System.out.println (iit.getHomeCurrency (). GetPrice (). ToString ()); Я получил полный список объектов.

Но, когда я хочу преобразовать этот объект в CSV, используйте

CSVWriter csvWriter = new CSVWriter(new FileWriter("example.csv"));
csvWriter.writeNext(new String[]{iit.getHomeCurrency().getPrice().toString(),"/n"} 
csvWriter.close();

Я получил только одну строку в CSV-файле: (

Код:

for(int i=0;i<contentElement.size();i++){
            JAXBElement<ListInvoiceType> invoiceTypeElement = (JAXBElement<ListInvoiceType>) contentElement.get(i);
            ListInvoiceType listInvoiceType = invoiceTypeElement.getValue();
            List<InvoiceType> invoiceTypeList = listInvoiceType.getInvoice();
            for(InvoiceType invoiceType:invoiceTypeList ){
                InvoiceHeaderType invoiceHeaderType = invoiceType.getInvoiceHead
er();
                InvoiceDetailType invoiceDetailType = invoiceType.getInvoiceDetail();                       

                InvoiceItemType iit = null;
                InvoiceAdvancePaymentItemType iapit = null;
                for(Serializable s:invoiceDetailType.getContent()){
                    if(s instanceof JAXBElement) {
                        JAXBElement<?> element = (JAXBElement)s;
                        if(element.getValue() instanceof InvoiceItemType){
                            iit = (InvoiceItemType)element.getValue();
                        }
                        else if(element.getValue() instanceof InvoiceAdvancePaymentItemType){
                            iapit = (InvoiceAdvancePaymentItemType)element.getValue();
                        }
                        else{
                            throw new Exception("xx");
                        }
                    }

                    else if(s instanceof String){

                    }
                    else{
                        throw new Exception("xx");
                    }       


                        if(iit!=null){          
                        CSVWriter csvWriter = new CSVWriter(new FileWriter("example.csv"));

                        csvWriter.writeNext(new String[]{iit.getHomeCurrency().getPrice().toString(), iit.getCentre().getIds()  ,invoiceHeaderType.getDate().toString(),invoiceHeaderType.getInvoiceType().value(),"\r\n"});

                        csvWriter.close();

Что я должен изменить, чтобы java записывал каждый объект в новую строку файла CSV?

Спасибо

1 Ответ

0 голосов
/ 16 января 2019

Основная проблема в том, что вы открываете новый файл для каждой итерации цикла, перемещаете

CSVWriter csvWriter = new CSVWriter(new FileWriter("example.csv"));

до for цикла

CSVWriter csvWriter = new CSVWriter(new FileWriter("example.csv"));
for(Serializable s:invoiceDetailType.getContent()){
    if(s instanceof JAXBElement) {
        //... 
    }

   if( iit !=n ull){          
       csvWriter.writeNext(new String[]{iit.getHomeCurrency().getPrice().toString(), iit.getCentre().getIds()  ,invoiceHeaderType.getDate().toString(),invoiceHeaderType.getInvoiceType().value(),"\r\n"});
   }

и закройте файл после цикла for

} //end for loop

 csvWriter.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...