【问题标题】:How to write to csv using CSVWriter from a comma separated key:value list of strings如何使用 CSVWriter 从逗号分隔的键写入 csv:字符串的值列表
【发布时间】:2021-06-07 20:49:09
【问题描述】:

我有一个 k:v 格式的字符串列表,如下所示:

List<String> data = new ArrayList();

data[0] = "acctHolderName:null,auctEndDt:2021-04-23,auctTitle:2 X BUCKLE RACING SEAT BELT HARNESS,bankName:null,buyerId:22494074,byrCntryId:1,cardlastFourDigits:1234,checkoutStatus:2,cityShipAddr:null,ckCompleteDate:2021-04-04 08:06:27,cnvstnIdList:null,countryShipAddr:null,createdTime:2021-04-04 08:06:27,firstTrackingDtlId:17824011,gmvBuyerLcAmt:59.990000000,gmvSellerLcAmt:59.9900000000000000,gmvUsdAmt:59.9900000000000000,instrumentType:null,itemId:4966893,itemPrice:59.99,itemSiteId:100,nonPciAccountId:null,omsExternalRfrncId:17-06848-86625,omsOrderId:170000684886625,orderStsId:0,paidDate:2021-04-04 08:06:27,paymentMethod:[34],"


data[1] = "acctHolderName:null,auctEndDt:2021-04-22,auctTitle:2 X BELT,bankName:null,buyerId:22491011,byrCntryId:2,cardlastFourDigits:5678,checkoutStatus:2,cityShipAddr:null,ckCompleteDate:2020-05-04 08:06:26,cnvstnIdList:null,countryShipAddr:null,createdTime:2020-05-04 08:06:27,firstTrackingDtlId:17834022,gmvBuyerLcAmt:59.990000000,gmvSellerLcAmt:59.9900000000000000,gmvUsdAmt:59.9900000000000000,instrumentType:null,itemId:4955893,itemPrice:59.99,itemSiteId:101,nonPciAccountId:null,omsExternalRfrncId:17-06848-86625,omsOrderId:170000684886625,orderStsId:0,paidDate:2021-03-04 08:06:27,paymentMethod:[34],"

如何使用opencsv CSVWriter 写入 csv,其中冒号之前是列名,之后是值。

例如在上面的例子中:acctHolderName:null,acctHolderName 是一个列名,null 是它的值。

【问题讨论】:

    标签: java arrays string csv opencsv


    【解决方案1】:

    您可以使用CSVWriter.writeAll(List&lt;String[]&gt; list) 方法来编写您的整个列表。为了从您的列表中以所需格式List&lt;String[]&gt; 获取适当的数据,您只需提取标题,例如从列表的第一个元素中提取标题,以及从列表的所有元素中提取所需的所有值。为此,只需在 , 处拆分每个字符串,流过生成的数组,在 : 处再次拆分,映射到第一个元素作为列名,到第二个元素作为值。

    例如,假设您的数据格式正确并且所有行都有相同数量的“列”,这是第一种没有异常处理的方法:

    public static void writeListToFile(List<String> list, String fileName) throws IOException {
        
        List<String[]> out = new ArrayList<>();
        
        //extract headers
        String[] columns = Arrays.stream(list.get(0).split(","))
                                 .map(str -> str.split(":")[0])
                                 .toArray(String[]::new);
        
        //extract values
        List<String[]> rows = list.stream()
                                  .map(line -> Arrays.stream(line.split(","))
                                                     .map(str -> str.split(":")[1])
                                                     .toArray(String[]::new))
                                  .collect(Collectors.toList());
        
        out.add(columns);
        out.addAll(rows);
        
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName))) {
            writer.writeAll(out);
        }
    }
    

    然后调用上面的方法

    public static void main(String[] args) throws IOException {
        List<String> data = List.of("acctHolderName:null,auctEndDt:2021-04-23,auctTitle:2 X BUCKLE RACING SEAT BELT HARNESS,bankName:null,buyerId:22494074,byrCntryId:1,cardlastFourDigits:1234,checkoutStatus:2,cityShipAddr:null,ckCompleteDate:2021-04-04 08:06:27,cnvstnIdList:null,countryShipAddr:null,createdTime:2021-04-04 08:06:27,firstTrackingDtlId:17824011,gmvBuyerLcAmt:59.990000000,gmvSellerLcAmt:59.9900000000000000,gmvUsdAmt:59.9900000000000000,instrumentType:null,itemId:4966893,itemPrice:59.99,itemSiteId:100,nonPciAccountId:null,omsExternalRfrncId:17-06848-86625,omsOrderId:170000684886625,orderStsId:0,paidDate:2021-04-04 08:06:27,paymentMethod:[34],",
                                    "acctHolderName:null,auctEndDt:2021-04-22,auctTitle:2 X BELT,bankName:null,buyerId:22491011,byrCntryId:2,cardlastFourDigits:5678,checkoutStatus:2,cityShipAddr:null,ckCompleteDate:2020-05-04 08:06:26,cnvstnIdList:null,countryShipAddr:null,createdTime:2020-05-04 08:06:27,firstTrackingDtlId:17834022,gmvBuyerLcAmt:59.990000000,gmvSellerLcAmt:59.9900000000000000,gmvUsdAmt:59.9900000000000000,instrumentType:null,itemId:4955893,itemPrice:59.99,itemSiteId:101,nonPciAccountId:null,omsExternalRfrncId:17-06848-86625,omsOrderId:170000684886625,orderStsId:0,paidDate:2021-03-04 08:06:27,paymentMethod:[34],");
    
        writeListToFile(data, "C:\\Users\\Atihska\\Downloads\\mydata.csv");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多