1

我想从自定义对象列表中生成一个 CSV 文件。

我有一个抽象类:

public abstract class MyClass{
    public static final String SEPARATOR = ";";

    // many private variables

    @Override
    public String toString(){
        // return all my variables values separated by SEPARATOR
    }
}

以及从这个类继承的几个具体类。我想toString()只在这个类中实现该方法,而不在每个具体类中重新实现。

是否有任何有用的库来实现这一点,还是我必须toString()为每个类手动实现方法?我应该使用反射吗?

4

3 回答 3

2

有一个类似于您的要求的库,名称为opencsv

于 2012-06-08T09:05:41.427 回答
1

反射方法的问题是 1) 您可以轻松地在具体类中获得您不希望在 csv 表中出现的字段。2) 你如何为你的 csv 表生成一个标题?

另外,我发现将 csv 生成逻辑放在自定义对象中是不好的设计,当然这取决于它们所代表的内容(毫无疑问,也可能有支持您的方法的原因)。考虑为此使用单独的类。

是的,你可以(甚至必须)使用反射,不,我不知道是否已经存在一个为你处理这个的库。其他人提到的 OpenCSV 可以完成将所有内容放在一起的工作,一旦您在 CSV 表中获得所需的值。

看看 Class.getFields(), Field.setAccessible() (如果你需要的话),应该可以。实际上使用反射并不难。

于 2012-06-08T09:18:28.440 回答
1

使用OpenCSV. 它是一个用于解析和编写 CSV 文件的库,可以处理引号、不同的分隔符和多行值。

于 2012-06-08T09:05:59.953 回答