在 Java 中解析 CSV 文件时出现问题



在此代码中,目的是解析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,它应该可以解决你的问题。

相关内容

  • 没有找到相关文章

最新更新