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

标签 java csv annotations jackson opencsv

我有一个充满数据的对象。 现在我想创建带有注释的类,该类允许我创建具有指定列顺序的 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”和“relatives name3”的列。其中元素+子元素表示亲属+(id或名称)。 除此之外,我想决定生成的 CSV 中的列顺序,这意味着 age 可以作为第一列在 name.

可能很难找到准确的解决方案,但任何附近的解决方案都值得赞赏并且会有所帮助。

最佳答案

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

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

但是听起来您不想限制用户的亲属数量。所以你可以使用 openCSV 来推出你自己的。给定一个用户对象列表,您必须做四件事:

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

祝你好运:)

关于java - 如何从带注释的 java 类编写/生成 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091232/

相关文章:

java - 如何在JAVA中获取SSL/TLS证书

ruby - 如何从 CSV.read 中的 CSV 文件中获取标题,而 ruby​​ 中只有标题行

java - 弗林克 : Declaring dynamic tuple size & type

java - 如何为要输出到 LogCat 的类编写注释?

ios - 'NSInvalidArgumentException'

java - Hibernate 问题中不推荐使用注释

java - 通过 Jsoup 登录网站

java 程序在 linux 上报告错误的时区(显示欧洲/都柏林的 IST)

java - 如何根据单个 Findbugs 检测器的结果使构建失败?

python - 在同一时间戳下对 csv 数据进行分组