使用 OpenCSV 时获取 CsvBeanIntrospectionException

rot*_*art 8 java javabeans opencsv

我正在尝试使用 openCSV 4.1 从 bean 列表中编写 CSV。但是,每当我运行程序时,我都会收到 CsvBeanIntrospectionException,然后收到 NoSuchMethodException: Unknown property 'fieldx' on class 'class TestObject'

我已成功使用读取器对应项将 CSV 读取到 bean 列表。

这是我的对象“TestObject”的代码:

import com.opencsv.bean.CsvBindByName;
import java.io.Serializable;

public class TestObject implements Serializable {
    @CsvBindByName
    int fieldx;
    @CsvBindByName
    int fieldy;
    public TestObject() {
    }
    public TestObject(int x, int y) {
        this.fieldx = x;
        this.fieldy = y;
    }

    public int getX() {
        return fieldx;
    }
    public int getY() {
        return fieldy;
    }
    public void setX(int x) {
        this.fieldx = x;
    }
    public void setY(int y) {
        this.fieldy = y;
    }
    @Override
    public String toString(){
        return "{" + fieldx + "," + fieldy + "}";
    }
}
Run Code Online (Sandbox Code Playgroud)

剩下的就是这样了。

  public class Project {
    public static void main(String[] args) {
        TestObject t1 = new TestObject(1,2);
        TestObject t2 = new TestObject(3,4);

        List<TestObject> testList = new ArrayList<>();
        testList.add(t1);
        testList.add(t2);

        Prep prep = new Prep();
        try {
            prep.writeCSV(testList);
        } catch (IOException | CsvDataTypeMismatchException | CsvRequiredFieldEmptyException ex) {
            ex.printStackTrace();
        }
    }
}

import com.opencsv.bean.*;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;

public class Prep {
    public void writeCSV(List<TestObject> t) throws IOException, 
            CsvDataTypeMismatchException,
            CsvRequiredFieldEmptyException {
        Writer writer = new FileWriter("testfile.csv");
     StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
     beanToCsv.write(t);
     writer.close();        
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 14

我遇到了类似的错误,尝试为要将 CSV 转换为的类添加默认构造函数,它对我有用。


Sof*_*ant 9

如果您使用 Lombok,请务必在 Pojo 之上添加 @NoArgConstructor。

  • 嗯……我为此花费了一个小时的时间。谢谢你!只是……为什么 (2认同)

rot*_*art 4

通过排除,我发现 getter 方法的名称必须与属性的名称匹配。通过下面的更正,现在我可以从对象列表写入 CSV。

//...
    public int getFieldx() {
        return fieldx;
    }
    public int getFieldy() {
        return fieldy;
    }
    public void setFieldx(int x) {
        this.fieldx = x;
    }
    public void setFieldy(int y) {
        this.fieldy = y;
    }
//...
Run Code Online (Sandbox Code Playgroud)