【问题标题】:convert java object list into CSV将 java 对象列表转换为 CSV
【发布时间】:2019-06-09 19:23:50
【问题描述】:

我的对象列表中有许多来自 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文件的新行?

谢谢

【问题讨论】:

    标签: java list csv object


    【解决方案1】:

    主要问题似乎是您为循环的每次迭代打开一个新文件,移动

    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();
    

    【讨论】:

    • 感谢 Joakim,它有帮助。现在我有另一个简单的问题,在 XML 之外,可能并非所有字段都已填充。在这种情况下,我得到了空指针异常。所以我尝试使用以下方法解决问题: if(iit.getCentre().getIds()==null) {iit.getCentre().getIds()="数据未填充";} 如果对象为空,则填充文本"数据未填写”在 csv.但是,通过这样的代码尝试,我得到了一个错误:赋值的左侧必须是一个变量。请问如何修复空指针异常?
    • @bennes 您会收到错误消息,因为getIds() 是一种方法,因此您无法为其分配任何内容。在你的 if 中使用一个局部变量,或者给它 getIds 的值或你拥有的字符串,然后在 writeNext 调用中使用该变量。或者更改 getIds 以返回“数据未填充”而不是 null
    • 嗨 Joakim,我很抱歉我的菜鸟问题 :( 但是当我尝试时: String hu = iit.getCentre().getIds().toString(); if(hu==null) { hu = “数据未填充” ;} 我在第一行得到了 NullPointer 异常(String hu = iit.getCentre().getIds().toString();) :( 其他建议也失败了,我做错了什么:)
    • 当您知道 getIds 可能返回 null 时,为什么还要执行 toString()?首先检查if 如果getIds() 返回null 然后采取相应的行动。 if( iit.getCentre().getIds()==null) {hu = ...} else {...}
    • 是的,问题也是 iit.getCentre()。可能为空,现在它已修复。一切正常,非常感谢 Joakim,祝你有美好的一天:)
    猜你喜欢
    • 2012-08-01
    • 2011-01-19
    • 2016-09-19
    • 2015-11-12
    • 2016-06-24
    • 2015-11-19
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多