在此代码中,目标是解析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));
文件中的列有一个标题,有时还有原始数据下面的附加信息(如String或整数单元格中的数字或单词)。
我问过如何在先前的问题中忽略这些附加信息,并将此代码作为答案:
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();
当我尝试实现此代码时,我在箭头标记的行处出现了两个错误。
线程中的异常&#34; main&#34; java.lang.Error:未解析的编译 问题:
类型List中的方法add(Country)不是 适用于参数(对象)
CsvToBean类型的方法processLine(MappingStrategy,String [])不可见
有人知道如何解决这个问题吗?我对Java很新。
非常感谢。
答案 0 :(得分:0)
方法processLine(MappingStrategy,String [])来自类型 CsvToBean不可见
表示此方法必须是可访问的(可能的原因;它是私有的,受保护的或友好的),所以使用public
类型List中的方法add(Country)不适用于 arguments(Object)
并且必须返回类型country,方法签名必须类似;
public Country processLine(ColumnPositionMappingStrategy strat, String [] row)
答案 1 :(得分:0)
一个解决方案应该是将processLine的响应转发到Country,如下所示:
list.add(csv.processLine(strat,row));
到
list.add((Country)csv.processLine(strat,row));
但是关于方法可见性的第二个问题清楚地表明您没有使用库的公共API 请阅读库的文档和示例,以了解如何使用它。
答案 2 :(得分:0)
使用CSVToBeanFilter中指出的your previous post来解决您的问题。