@Carlo V. Dango質問を簡略化し、ドキュメントを読みました。慌てる必要はありません。それでも、私には問題があります。私が1つを解決するのを手伝ってください、そしてそれはそれらすべてを解決します。ありがとうございました。
質問:文字列以外のフィールドが欠落しているcsvレコードがある場合、欠落しているエントリをデフォルト値に変換する方法(または、少なくともNullPointerExceptionをスローしない方法)はありますか?オプションのcellProcessorも、エラーを防ぐために表示されません。
このプログラムは、基本的にSuperCSVWebサイトから取得したものです。
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
マイユーザーBean:
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)
ありがとう。