【发布时间】:2016-02-29 12:36:43
【问题描述】:
在此代码中,目的是解析 CSV 文件并将其数据映射到 bean 对象。
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(Country.class);
String[] columns = new String[] {"countryName", "capital"};
strat.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
String csvFilename = "C:/Users/user/Desktop/sample.csv";
CSVReader csvReader = new CSVReader(new FileReader(csvFilename));
文件中的列在原始数据下方有一个标题,有时还有附加信息(如字符串或整数单元格中的数字或单词)。
我在之前的问题中询问了如何忽略此附加信息,并得到此代码作为答案:
List<Country> list = new ArrayList<Country>();
String [] row = csvReader.readNext(); //skip header
if(row == null) throw new RuntimeException("File is empty");
row = csvReader.readNext();
String [] nextRow = csvReader.readNext();
while(row != null) {
if(nextRow == null) break; //check what 'row' is last
if("Total:".equalsIgnoreCase(row[1])) break; //check column for special strings
list.add(csv.processLine(strat, row)); <----
row = nextRow;
nextRow = csvReader.readNext();
当我尝试实现此代码时,我在箭头标记的行出现了两个错误。
线程“主”java.lang.Error 中的异常:未解决的编译 问题:
类型List中的add(Country)方法不是 适用于参数(对象)
CsvToBean 类型的方法 processLine(MappingStrategy, String[]) 不可见
有人知道如何解决这个问题吗?我对 Java 还很陌生。
非常感谢。
【问题讨论】:
-
processLine返回什么? -
processLine 方法需要返回一个 Country。如果该行返回一个国家信息字符串,则创建国家:add(new Country(processLine(strat, row));
-
您的 CSVToBean 需要获取参数。您需要创建:CsvToBean
csv = new CsvToBean()。这样 bean 就知道通用返回类型。 -
谢谢它解决了第一个问题!但第二个仍然存在