为了账号安全,请及时绑定邮箱和手机立即绑定

无法通过Apache Commons CSV读取超过记录的内容

无法通过Apache Commons CSV读取超过记录的内容

料青山看我应如是 2021-04-08 14:10:50
我有这样的csv文件:-a,b,c,d       //<- header0.1,0.123,2.13,3.220.3,0.213,2.11,3.120.5,0.231,2.3,3.210.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文件的第一条记录,而第二次迭代则给出了空指针异常。我无法弄清楚我做错了什么!
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

首先,我确定您正在成功读取第一条记录,但是不可能将其添加到列表中,因此:

  • 您正在使用Enhaced for循环,这意味着第二条记录在那里,这不是您的问题。

  • CSVInputFileModel似乎是正确的。

  • 您声明了inputCSVData,但未实例化。

我的结论是您错过了输入列表实例,这就是为什么要输入第一个迭代,但绝不要输入第二个迭代的原因。

解决这个问题,然后inputCSVData = new ArrayList<CSVInputFileModel>()再尝试在代码中添加元素以对其进行修复。


查看完整回答
反对 回复 2021-04-14
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信