【问题标题】:Null pointer excpetion with opencsv CsvToBeanopencsv CsvToBean 的空指针异常
【发布时间】:2015-09-11 11:20:30
【问题描述】:

我正在尝试使用 openCSV 将 CSV 文件中的所有行转换为 java bean。我的文件中每行有 21 列,用管道符号 (|) 分隔。但是在 csv 文件中使用此 code.rows 获取空指针异常还包括空单元格。我无法弄清楚错误在哪里。任何人都可以帮助我

package com.alu.mdf.testsuite.sure;
import java.io.FileReader;
import java.util.List;
import com.opencsv.CSVParser;
import com.opencsv.CSVReader;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBean;

//import com.alu.mdf.test.common.Person;

    public class CSVExplorer {

        @SuppressWarnings({"rawtypes", "unchecked"})
        public static void main(String[] args) throws Exception
        {
            CsvToBean csv = new CsvToBean();

            String csvFilename = "TestCaseConfigurationFiles/application.csv";
            //CSVReader csvReader = new CSVReader;
            CSVParser csvParser=new CSVParser('|');
            CSVReader reader = new CSVReader(new FileReader(csvFilename),1,csvParser);



            //Set column mapping strategy
            List list = csv.parse(setColumMapping(), reader);

            for (Object object : list) {
                SUREDataBean SUREDataBean = (SUREDataBean) object;
                System.out.println(SUREDataBean);
            }
        }

        @SuppressWarnings({"rawtypes", "unchecked"})
        private static ColumnPositionMappingStrategy setColumMapping() throws Exception
        {
            ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
            strategy.setType(SUREDataBean.class);
            //strategy.createBean();
            String[] columns = new String[] {"InputDataStartIdentifier","EntityType","Operation","IncludeId","IdValue","AssociatedResource","SearchQueryForGETRequest/ParametersForPUTRequest","PayloadLocation","TestCaseName","Description","userName","password","InputDataEndIdentifier","ValidationDataStart","ExpectedStatusCode","VerficationParameters","Method","class","Prerequisites","Group","ValidationDataEnd"};
            System.out.println(columns.length);
            strategy.setColumnMapping(columns);
            return strategy;
        }

    }

这是错误堆栈跟踪:

线程“main”java.lang.RuntimeException 中的异常:解析 CSV 时出错!在 com.opencsv.bean.CsvToBean.parse(CsvToBean.java:95) 在 com.opencsv.bean.CsvToBean.parse(CsvToBean.java:75) 在 com.alu.mdf.testsuite.sure.CSVExplorer.main(CSVExplorer .java:28) 引起:com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:123) 的 com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:101) 的 java.lang.NullPointerException。 opencsv.bean.CsvToBean.parse(CsvToBean.java:91) ...

【问题讨论】:

    标签: java csv opencsv


    【解决方案1】:

    我认为uniVocity-parsers 给您带来的麻烦会更少。它也比 OpenCSV 快得多。要使用它,首先注释你的 bean:

    class SUREDataBean {
    
        @NullString(nulls = { "?", "-" }) // if the value parsed in the quantity column is "?" or "-", it will be replaced by null.
        @Parsed(defaultNullRead = "0") // if a value resolves to null, it will be converted to the String "0".
        private Integer quantity; // The attribute name will be matched against the column header in the file automatically.
    
        @Trim
        @LowerCase
        @Parsed
        private String comments;
        ...
    
    }
    

    解析:

    BeanListProcessor<SUREDataBean> rowProcessor = new BeanListProcessor<SUREDataBean>(SUREDataBean.class);
    
    CsvParserSettings parserSettings = new CsvParserSettings();
    settings.getFormat().setDelimiter('|');
    parserSettings.setRowProcessor(rowProcessor);
    parserSettings.setHeaderExtractionEnabled(true);
    
    CsvParser parser = new CsvParser(parserSettings);
    
    //Parsing is started here.
    //this submits all rows parsed from the input to the BeanListProcessor
    parser.parse(new FileReader(new File("/examples/bean_test.csv"))); 
    
    List<SUREDataBean> beans = rowProcessor.getBeans();
    

    披露:我是这个库的作者。它是开源免费的(Apache V2.0 许可)。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      相关资源
      最近更新 更多