@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