在java中将csv文件读入数组(add方法不起作用)

n3ipq98p  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(317)

我正在尝试使用eclipse在java类中实现csv读取器。我不断得到一个关于add方法的错误“add(person)in the type list is not applicable for the arguments(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扩展程序?在程序中是必需的。

dzjeubhm

dzjeubhm1#

贝塔的回答是正确的。
我想指出的是,对于阅读csv,您可能需要考虑在代码中使用现有的解决方案,例如:
apache commons csv
Jacksoncsvmapper
示例代码
这些库将有助于带引号/不带引号的列以及将值转换为正确的数据类型。

ppcbkaq5

ppcbkaq52#

这个 line.split( "," ) 方法将返回字符串数组。
它所做的是:原始字符串 line 被拆分为字符串数组。在该数组中,每个字符串都是 line 用逗号分隔。
例如,如果 line"Peter,Smith,38" ,将返回以下字符串数组: [ "Peter", "Smith", "38" ] .
但是,由于您的列表只能包含 Person ,它不能接受 String[] 返回的数组 line.split( "," ) .
假设你有一个 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 );
}

相关问题