使用OpenCSV时获取CsvBeanIntrospectionException

时间:2018-05-22 09:13:52

标签: java javabeans opencsv

我正在尝试使用openCSV 4.1从bean列表中编写CSV。但是,每当我运行程序时,我得到CsvBeanIntrospectionException,然后是类'TestObject'上的NoSuchMethodException:未知属性'fieldx'

我已成功使用阅读器副本将CSV读取到bean列表中。

这是我的对象'TestObject'的代码:

  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();        
    }
}

剩下的就是这里。

C:\Users\{username}\.m2

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

SiliCompressor

答案 2 :(得分:1)

就我而言,构造函数未声明为公共!

答案 3 :(得分:0)

我的情况是因为我正在测试 lib,所以我创建了一个非公共 bean 文件,这是问题,因此请确保 bean 文件是公共类文件,因为 lib 使用 CGLIB 代理类所以它需要访问它

答案 4 :(得分:0)

就我而言,这是因为 final 关键字:

@Data
@Accessors(chain = true)
public class CsvFile {

    @CsvBindByName(column = "ColumnOne")
    private final String columnOne;
}

删除 final 关键字后工作正常。