CSV解析报错

报错信息:

java.lang.RuntimeException: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.
    at com.opencsv.bean.concurrent.ProcessCsvLine.run(ProcessCsvLine.java:85)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.verifyLineLength(HeaderColumnNameMappingStrategy.java:108)
    at com.opencsv.bean.AbstractMappingStrategy.populateNewBean(AbstractMappingStrategy.java:313)
    at com.opencsv.bean.concurrent.ProcessCsvLine.processLine(ProcessCsvLine.java:116)
    at com.opencsv.bean.concurrent.ProcessCsvLine.run(ProcessCsvLine.java:77)
    ... 3 more

原因:

   excel文件分割符导致的,windows是逗号  Mac是分号          openCSV官网地址在下面

   http://opencsv.sourceforge.net/#csvparser

解决办法:

  我自己读取所有行,然后按照索引赋值,你们可以参考参考,有其他好的解决方案请留言:

@Override
public List<Excel> excelAnalysis() {
    ArrayList<Excel> result = new ArrayList<>();
    try {
        CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(FILE_PATH + StrUtil.SLASH + FILE_NAME), Charset.forName("gbk")));
        List<String[]> myEntries = reader.readAll();
        if (ObjectUtil.isNotEmpty(myEntries) && myEntries.size() > 0) {
            for (int i = 1; i < myEntries.size(); i++) {
                String[] myEntry = myEntries.get(i);
                Excel excel = new Excel();
                excel.setSaleOrdDetId(myEntry[0]);
                excel.setSaleOrdId(myEntry[1]);
                excel.setParentSaleOrdId(myEntry[2]);
                excel.setBeforePrefrAmount(new BigDecimal(myEntry[31]));
                excel.setAfterPrefrAmount(new BigDecimal(myEntry[32]));
                excel.setSaleOrdTm(myEntry[61]);
                excel.setSaleOrdDt(myEntry[62]);
                excel.setItemSkuId(myEntry[75]);
                excel.setItemId(myEntry[76]);
                excel.setItemName(myEntry[77]);
                excel.setFreeGoodsFlag(myEntry[78]);
                excel.setMcOrdFlag(myEntry[151]);
                excel.setPopShopId(myEntry[168]);
                result.add(excel);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值