【问题标题】:Reading a csv file into an array in Java (the add method not working)将 csv 文件读入 Java 中的数组(add 方法不起作用)
【发布时间】:2020-12-07 07:55:18
【问题描述】:

我正在尝试使用 Eclipse 在我的 Java 类中实现一个 csv 阅读器。我不断收到添加方法的错误“类型列表中的add(Person)不适用于参数(String [])。我做错了什么?

public static List<Person> readPersons(String fileName)
throws FileNotFoundException {
    
    
    int count = 0; 
    List<Person[]> content = new ArrayList<>(); 
    try(BufferedReader cv = new BufferedReader(new FileReader(fileName))){
        
        
        String line = "";
        while ((line = cv.readLine()) != null) {
            content.add(line.split(",")); 
        }
    } catch (FileNotFoundException e) {
        
        
    }
        
    return content;     
        
    }

另外,如何实现这个 FileNotFoundException 扩展器?在程序中是必需的。

【问题讨论】:

  • line.split 将返回 String 的数组,而不是 Person 的数组。

标签: java arrays eclipse csv oop


【解决方案1】:

line.split( "," ) 方法将返回一个字符串数组。

它的作用是:将原始字符串line 拆分为一个字符串数组。在该数组中,每个字符串都是line 的子字符串,用逗号分隔。

例如,如果line"Peter,Smith,38",则将返回以下字符串数组:[ "Peter", "Smith", "38" ]

但是,由于您的 List 只能包含 Person 类型的对象,因此它不能采用 line.split( "," ) 返回的 String[] 数组。

因此,假设您有一个 Person 的构造函数,如下所示:Person( String firstName, String secondName, int age ) 您必须将您的 while 循环更改为如下所示:

while ( ( line = cv.readLine( ) ) != null )
{
  // Get the data from the CSV object
  String[] csvData = line.split( "," );
  
  // Create a Person object with the retrieved data
  Person personFromCsvLine = new Person( csvData[0], csvData[1], Integer.parseInt( csvData[2] );
  
  // Now you can add the person object to your list
  content.add( personFromCsvLine );
}

【讨论】:

  • 我仍然遇到同样的错误。一定和Eclipse有关系???另外,我认为您在最后一行写错了变量。这是错误:“List 类型中的方法 add(Person[]) 不适用于参数 (Person)”
  • @ReceptionistTWLawGroup 此代码在add 调用中添加一个人,但您已声明列表在每个add 调用中获取一组人员。您真的希望列表中的每个条目都是一个数组吗?这与 Eclipse 无关。
  • @greg-449 实际上没有!我打算将每一行添加到一个数组中。它是一个 csv 文件,名称按年龄分隔。
  • @ReceptionistTWLawGroup 那么它应该是 List&lt;Person&gt; 而不是 List&lt;Person[]&gt; 并且这个答案中的代码看起来是正确的。
  • 另外,在方法签名中你想返回一个List&lt;Person&gt;。这与 List&lt;Person[]&gt; 类型不兼容,后者是人员数组列表,不是人员列表。
【解决方案2】:

be-ta的答案是正确的。

我想指出,要读取 CSV,您可能需要考虑在代码中使用现有解决方案,例如:

  1. Apache Commons CSV
  2. Jackson CsvMapper

这些库将帮助引用/未引用的列以及将值转换为正确的数据类型。

【讨论】:

  • 我仍然遇到同样的错误。一定和Eclipse有关系???另外,我认为他在最后一行写错了变量。这是错误:“List 类型中的方法 add(Person[]) 不适用于参数 (Person)”–
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多