使用Java解析CSV文件时出现问题

时间:2016-02-29 12:36:43

标签: java parsing csv opencsv

在此代码中,目标是解析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很新。

非常感谢。

3 个答案:

答案 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来解决您的问题。