@Carlo V. Dango 我简化了我的问题,并且我已经阅读了文档 - 建议不要惊慌。不过,我有问题。帮我解决一个问题,它会解决所有问题。谢谢。解析SuperCSV字符串
问题:当我有一个缺少非字符串字段的csv记录时,如何(甚至是否可以)将缺少的条目转换为默认值,或者至少不会抛出NullPointerException?可选的cellProcessor也不会阻止错误。
这个程序基本上来自SuperCSV网站。
package com.test.csv;
import java.io.FileReader;
import org.supercsv.cellprocessor.ParseBigDecimal;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.ParseInt;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
public class CSVReader {
private static final CellProcessor[] cellProcessor = new CellProcessor[] {
null,
null,
new ParseInt(),
new ParseDate("yyyyMMdd"),
new ParseBigDecimal()
};
public static void main (String[] args) throws Exception {
CsvPreference pref = new CsvPreference('"', '|', "\n");
ICsvBeanReader inFile = new CsvBeanReader(new FileReader("C:\\temp\\sapfilePipe.txt"), pref);
try {
final String[] header = inFile.getCSVHeader(true);
User user;
while ((user = inFile.read(User.class, header, cellProcessor)) != null) {
System.out.println(user);
}
} finally {
inFile.close();
}
}
}
这里是CSV文件,我读。注意第一条记录中有一个缺失的字段(年龄)。
firstName|lastName|age|hireDate|hourlyRate
A.|Smith| |20110101|15.50
我的用户豆:
package com.test.csv;
import java.math.BigDecimal;
import java.util.Date;
public class User {
private String firstName;
private String lastName;
private int age;
private Date hireDate;
private BigDecimal hourlyRate;
...getters/setters...
以下是错误:
Exception in thread "main" java.lang.NullPointerException
at org.supercsv.io.CsvBeanReader.fillObject(Unknown Source)
at org.supercsv.io.CsvBeanReader.read(Unknown Source)
at com.glazers.csv.CSVReader.main(CSVReader.java:31)
感谢。
非常感谢您... – Davidson
嗨...如果我有一个应该转换为BigDecimal的空白列,我试图\t \t \t \t \t新ParseBigDecimal(新StrReplace(””,‘0’)), – Davidson
当建立cellprocessors,你从内到外或在外面搭建....例如..如果我有一个空白在一列,否则将是一个数量值,我如何链处理器将空白转换为0,然后使用ParseBigDecimal?我越来越绝望地理解我不理解的东西。意识到我可以在CellProcessor数组中放置一个空值是巨大的。我在网站的例子中解释为“阅读但未处理”,完全忽略。 – Davidson