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



我有一个充满数据的对象。现在我想创建一个带有注释的类,它允许我创建具有指定列顺序的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个元素,则应该再添加一个名为"relatives id3"one_answers"relatives name3"的列。即元素+子元素表示亲属+ (id或名称)。与此同时,我想确定在生成的CSV中的列的顺序意味着age可以作为name之前的第一列。

这个问题可能没有确切的解决方案,但任何接近的解决方案都是非常感谢的,并且将会有所帮助。

物品内的List才是凶手。OpenCSV有一个BeanToCsv类将对象列表转换为CSV文件,但我怀疑它是否适用于集合(从未尝试过)。

如果你想限制一个人的亲属数量,你仍然可以使用它。然后,您创建一个中间类,它具有原始数据字段,并使用您的User类的构造函数。然后使用BeanToCsv创建所需的csv输出。

然而,听起来你并不想限制用户的亲戚数量。因此,您可以使用openCSV来滚动您自己的。给定一个用户对象列表,您必须做四件事:

  1. 确定用户在您的列表中拥有的最大亲属数量。
  2. 创建一个String数组,其中头值使用#1的值来确定要放置多少相对名称和id列。一旦完成,创建一个List<String []>并将数组放到列表中。
  3. 创建一个辅助类,将User数组转换为String数组。从#1传递值,所以如果你有比max更少的亲戚,你可以填充空字符串或null(你的选择)。使用此循环遍历用户对象列表,将每个用户转换为字符串数组,并将该数组添加到#2中创建的列表。
  4. 使用openCsv中的CSVWriter调用writeAll方法传递在步骤2和3中创建和填充的列表。

祝你好运

相关内容

  • 没有找到相关文章

最新更新