当前位置: 首页 > 知识库问答 >
问题:

OpenCSV解析带有列表头的CSV

阴凯歌
2023-03-14

我试图使用opencsv 3.3与一些用户解析一个简单的csv文件并将其放入bean中,但在运行代码时得到一个类未找到异常。下面是我用于读取对象的Person.class文件。

public class Person {
    private String firstname;
    private String lastname;
    private String email;
    private String type;

    /*public Person () {}
    public Person (String firstname, String lastname, String email, String type) {
        this.firstname = firstname;
        this.lastname = lastname;
        this.email = email;
        this.type = type;
    }*/

    //set all the variables for the person
    //set the first name
    public String getFirstName() {
        return firstname;
    }
    public void setFirstName(String firstname) {
        this.firstname = firstname;
    }

    //set the last name
    public String getLastName() {
        return lastname;
    }
    public void setLastName (String lastname) {
        this.lastname = lastname;
    }

    //set the email address of the user
    public String setEmail() {
        return email;
    }
    public void getEmail(String email) {
        this.email = email;
    }

    //set the type for the user
    public String setType() {
        return type;
    }
    public void getType (String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "User [firstname=" + firstname + ", lastname=" + lastname + ", email=" + email + ", type=" + type + "]";
    }
}

读取 csv 的代码如下。

String filename = "D:/Projects/deploy/resources/sample.csv";
try {          
    HeaderColumnNameTranslateMappingStrategy<Person> strategy = new HeaderColumnNameTranslateMappingStrategy<Person>();
    strategy.setType(Person.class);
    Map<String, String> mapping = new HashMap<String, String>();
    mapping.put("firstname", "firstname");
    mapping.put("lastname", "lastname");
    mapping.put("email", "email");
    mapping.put("type", "type");
    strategy.setColumnMapping(mapping);
    System.out.println("past the mapping");

    CSVReader reader = new CSVReader(new FileReader(filename));
    System.out.println("past the reader");

    CsvToBean<Person> csvbean = new CsvToBean<Person>();
    System.out.println("past the csvtobean");

    List<Person> csvusers = csvbean.parse(strategy, reader);
    System.out.println(csvusers);


} catch (Exception e) {
    System.out.println("there was an exception in the main program:" + e);
}

当我运行这个时,它表示没有找到报头映射的类。你知道这个人是否有问题吗。类还是使用映射?如果您能提供任何帮助,我们将不胜感激。

共有1个答案

岳曦
2023-03-14

如果有人遇到这个问题,上面的代码工作正常。我的类路径中没有apache公共lang3,这是opencsv所必需的。一旦我添加了这个,一切都开始正常工作。

谢谢尼克

 类似资料:
  • 我正在尝试使用OpenCSV解析CSV文件。其中一列以YAML序列化格式存储数据,并被引用,因为其中可以包含逗号。它里面也有引号,所以它通过放两个引号来转义。我能够在Ruby中轻松解析这个文件,但使用OpenCSV我无法完全解析它。这是一个UTF-8编码的文件。 这是我的Java片段,它试图读取文件 这是此文件中的2行。第一行没有被正确解析,并且在处被拆分,因为我猜是转义双引号。

  • 我正在尝试使用OpenCsv从CSV解析即时,如下所示: 我知道OpenCsv应该支持< code>java.time。 但是当我试图使用它的时候,我得到了下面的异常: 分析CSV行时出错:8。 ... 原因:java.time.format。DateTimeParseException:无法解析文本“2022-04-21 00:00:00”:无法从临时加速器获取即时数据:{HourOfAmPm=

  • 问题内容: 我们都知道python的 句法。 但是,列表理解的 AST表示可以容纳多个’if’表达式: 有人可以给我一个python代码示例,该示例会生成带有多个“ if”表达式的AST吗? 问题答案: 只需将它们一个接一个地堆叠: 产生介于11和49之间(含)的整数。

  • 我有以下csv文件, 我无法用opencsv jar读取上述csv文件。它无法读取,因为数据中有双引号。我的csv阅读器构造函数如下所示:,

  • 我有一个CSV文件,我想用开放CSV的csv阅读器在Java中解析。 为此,我创建了一个Bean对象,信息映射到该对象。我的有点长,所以这是我从教程中得到的一个例子: 我用来解析CSV文件并将信息映射到bean的代码类似于以下代码: 问题在于,我的CSV不仅包含原始数据,还包含列标题和其他数据。对于专栏标题,我只从某行读取我的文件,解决了这个问题: (1 是开始读取的行) 其他数据主要是文件末尾(

  • 问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包