在此代码中,目的是解析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();
当我尝试实现此代码时,我在箭头标记的行处出现两个错误。
线程"main"java.lang 中的异常:未解析的编译 问题:
列表类型中的方法 add(国家) 不是 适用于参数(对象)
来自CsvToBean 类型的方法 processLine(MappingStrategy, String[]) 不可见
有人知道如何解决这个问题吗?我对Java相当陌生。
谢谢。
方法processLine(MappingStrategy, String[]) 从类型 CsvToBean 不可见
意味着此方法必须是可访问的(可能的原因;它是私有的、受保护的或友好的),所以使用公共
类型列表中的方法add(国家/地区)不适用于 参数(对象)
并且必须返回类型国家/地区,方法签名必须是类似的东西;
public Country processLine(ColumnPositionMappingStrategy strat, String [] row)
一种解决方案应该是将响应从进程线向下转换为国家/地区,如下所示:
list.add(csv.processLine(strat, row));
自
list.add((Country) csv.processLine(strat, row));
但是您的第二个问题,关于方法可见性,清楚地表明您没有使用库的公共 API。
请阅读库的文档和示例,以了解如何使用它。
使用我在你上一篇文章中指出的CSVToBeanFilter,它应该可以解决你的问题。