【发布时间】:2019-01-06 04:33:25
【问题描述】:
我有这样的 csv 文件:-
a,b,c,d //<- header
0.1,0.123,2.13,3.22
0.3,0.213,2.11,3.12
0.5,0.231,2.3,3.21
0.7,0.121,2.26,3.321
我正在使用 apache commons csv 来读取 csv 文件。
我已经制作了对应于上述 csv 文件的 POJO 命名为 CSVInputFileModel 类。
以下是我用来读取文件的方法:-
private List<CSVInputFileModel> inputCSVData;
void fileParser() throws IOException {
Reader in = new FileReader(INPUT_CSV_FILE);
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
// Adding each record to array list
CSVInputFileModel csvInputFileModel = new CSVInputFileModel();
csvInputFileModel.setA(Double.parseDouble(record.get("a")));
csvInputFileModel.setB(Double.parseDouble(record.get("b")));
csvInputFileModel.setC(Double.parseDouble(record.get("c")));
csvInputFileModel.setD(Double.parseDouble(record.get("d")));
inputCSVData.add(csvInputFileModel); //<-- NPE at second iteration
}
System.out.println(inputCSVData);
}
下面是 CSVInputFileModel 类
public class CSVInputFileModel {
private double a;
private double b;
private double c;
private double d;
public CSVInputFileModel() {
}
//All args constructor
//hashcode equals
//getter setters
//toString
}
以下代码给出空指针异常。 当我运行调试器时,我发现在第一次迭代中,apache csv commons 能够读取 csv 文件的第一条记录,而它是 第二次迭代,它给出了空指针异常。
我无法弄清楚我做错了什么!。
【问题讨论】:
-
如果将
Iterable<CSVRecord> records更改为CSVParser records会怎样? -
@Rcordoval 还是一样。第一条记录已成功添加到列表中,就在那个空指针异常之后!
-
你能告诉我们你的 CSVInputFileModel 和 inputCSVData 变量在哪里吗?以及抛出 NPE 的行
-
@Rcordoval 我已经添加了详细信息..
-
好的。现在,您的代码中的某处是 inputCSVData = new ArrayList
()?这可能会在读取第二条记录之前导致 NPE。
标签: java spring csv spring-boot apache-commons-csv