jackson 如何从带注解的java类编写/生成CSV文件

lqfhib0f  于 2022-11-09  发布在  Java
关注(0)|答案(1)|浏览(201)

我有一个充满数据的对象。现在我想创建一个带有注解的类,它允许我创建带有指定列顺序的CSV文件或任何通用解决方案。我的数据表示有点复杂,意味着它带有对象列表。

例如:

class User {
public String name;
public int age;

List<Relatives> relativeList;
public User() {
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

public List<Relatives> getRelativeList() {
    return relativeList;
}

public void setRelativeList(List<Relatives> relativeList) {
    this.relativeList = relativeList;
}
}

class Relatives {

public int id;
public String name;

public void setId(int id) {
    this.id = id;
}

public int getId() {
    return id;
}

public void setName(String name) {
    this.name= name;
}

public String getName() {
    return name;
}
}

我想创建CSV文件的数据填充在这个类的对象。

例如

User user = new User();
user.setName("Jackson");
user.setAge(32);
List<Relatives> relativeList = new ArrayList<Relatives>();
Relatives relatives = new Relatives();
relatives.setId(110);
relatives.setName("father");
relativeList.add(relatives);

relatives = new Relatives();
relatives.setId(111);
relativ.add(relatives);
relativeList.setName("mother");

user.setRelativeList(relativeList);

我想创建CSV文本,如。

"name";"age";"relatives id1";"relatives name1","relatives id2";"relatives name2"
"Jackson";"30";"110";"father";"111";"mother"

如示例中所述,如果relativeList中有3个元素,则应添加名称为“relativesid3”和“relativesname3”的多一列。即元素+子元素意味着亲属+(标识或姓名)。同时,我希望确定生成的CSV中列的顺序,意味着***年龄***可以作为***姓名***之前的第一列。
这可能是可能的,确切的解决方案,这是不容易获得的,但任何附近的解决方案是真正赞赏和将是有帮助的。

whitzsjs

whitzsjs1#

OpenCSV有一个BeanToCsv类,可以将对象列表转换为CSV文件,但我怀疑它是否适用于集合(尽管从未尝试过)。
如果你想限制一个人拥有的亲属的数量,你仍然可以使用它。然后你创建一个中间类,它包含原始数据字段,并带有一个接受你的User类的构造函数。然后使用BeanToCsv创建你想要的csv输出。
但是,听起来你并不想限制用户的亲属数量,所以你可以使用openCSV来滚动你自己的用户对象。给定一个用户对象列表,你必须做四件事:
1.确定用户在列表中拥有的亲属的最大数量。
1.创建一个String数组,其中的头值使用#1中的值来确定要放置多少个相对的name和id列。完成后,创建一个List<String []>,并将数组放入列表中。
1.创建一个helper类,将User转换为String数组。从#1传入值,这样如果你的亲戚比max少,你可以用空字符串或null填充(你自己选择)。使用这个循环遍历用户对象列表,将每个用户转换为一个字符串数组,并将该数组添加到#2创建的列表中。
1.在openCsv中使用CSVWriter调用writeAll方法,传入您在步骤2和3中创建和填充的列表。
祝你好运:)

相关问题