Java 使用opencsv CsvToBean执行空指针交换
我正在尝试使用openCSV将CSV文件中的所有行转换为java bean。我的文件中每行有21列,以管道符号(|)分隔。但此代码会出现空指针异常。CSV文件中的行也包含空单元格。我无法找出错误的位置。有人能帮我解决吗Java 使用opencsv CsvToBean执行空指针交换,java,csv,opencsv,Java,Csv,Opencsv,我正在尝试使用openCSV将CSV文件中的所有行转换为java bean。我的文件中每行有21列,以管道符号(|)分隔。但此代码会出现空指针异常。CSV文件中的行也包含空单元格。我无法找出错误的位置。有人能帮我解决吗 package com.alu.mdf.testsuite.sure; import java.io.FileReader; import java.util.List; import com.opencsv.CSVParser; import com.opencsv.CSVRe
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.CsvToBean.processLine(CsvToBean.java:101)的java.NullPointerException引起在com.opencsv.bean.CsvToBean.parse(CsvToBean.java:91)上
我想你在这方面的麻烦会少一些。它也比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();
BeanListProcessor rowProcessor=新的BeanListProcessor(SUREDataBean.class);
CsvParserSettings parserSettings=新的CsvParserSettings();
settings.getFormat().setDelimiter(“|”);
setRowProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);
CsvParser parser=新的CsvParser(parserSettings);
//解析从这里开始。
//这会将从输入解析的所有行提交给BeanListProcessor
parser.parse(新文件阅读器(新文件(“/examples/bean_test.csv”));
List bean=rowProcessor.getBeans();
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)