gpt4 book ai didi

java - BeanIO 将带注释的类写入固定长度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:25 25 4
gpt4 key购买 nike

我正在尝试使用 beanio 将带注释的类写入固定长度的文件。所有类都已注释,但出现异常

"Invalid field 'employees', in record 'team', in stream 'Tm': Type handler not found for type 'com.mycompany.bio.Employee'"

下面是我的源代码

 public static void main(String[] args) {
StreamFactory factory = StreamFactory.newInstance();
StreamBuilder builder = new StreamBuilder("Tm")
.format("fixedlength")
.parser(new FixedLengthParserBuilder())
.addRecord(com.mycompany.bio.Team.class);
factory.define(builder);

Employee e1 = new Employee("EmpF1", "EmpL1", "Developer", "1", new Date());
Employee e2 = new Employee("EmpF2", "EmpL2", "Developer", "2", new Date());
Team team = new Team();
team.setTeamName("Great Team");
team.getEmployees().add(e1);
team.getEmployees().add(e2);

BeanWriter out = factory.createWriter("Tm", new File("C:\\Users\\user\\Desktop\\tm.dat"));

out.write(team);
out.flush();
out.close();
}

团队类:

@Record(minOccurs = 1)
public class Team {
// @Segment(collection = ArrayList.class, minOccurs = 0, maxOccurs = Integer.MAX_VALUE) segments return single line team::teamName and 2 emp records, I want to see 3 lines 1.teamname 2 & 3 emp info
@Field(ordinal = 1, length = 106)
private List<Employee> employees;
@Field(ordinal = 0, length = 10)
private String teamName;
.....
}

员工类:

@Record(minOccurs=1)
public class Employee {
@Field(ordinal = 1, length = 30)
private String firstName;
@Field(ordinal = 2, length = 30)
private String lastName;
@Field(ordinal = 3, length = 30)
private String title;
@Field(ordinal = 4, length = 8)
private String salary;
@Field(ordinal = 5, format="MMddyyyy", length = 8)
private Date hireDate;
...
}

最佳答案

快速解决方案是:

    public static void main(String[] args) throws IOException {
StreamFactory factory = StreamFactory.newInstance();
StreamBuilder builderCSV = new StreamBuilder("Tm")
.format("fixedlength")
.parser(new FixedLengthParserBuilder())
.addRecord(com.mycompany.bio.Team.class)
.addRecord(com.mycompany.bio.Employee.class);
factory.define(builderCSV);

BeanWriter out = factory.createWriter("Tm", new File("C:\\Users\\topSecretUsername\\Desktop\\tm.txt"));

Employee e1 = new Employee("EmpF1", "EmpL1", "Developer", "1", new Date());
Employee e2 = new Employee("EmpF2", "EmpL2", "Developer", "2", new Date());
Team team = new Team();
team.setTeamName("Great Team");
team.getEmployees().add(e1);
team.getEmployees().add(e2);

out.write(team);
for (Employee e : team.getEmployees()) {
out.write(e);
}

out.flush();
out.close();

}

团队类:

@Record
public class Team {
@Field(ordinal = 1, length = 10)
private String teamName;
private List<Employee> employees = new ArrayList<>();
....}

员工:

@Record
public class Employee {

@Field(ordinal = 1, length = 30)
private String firstName;
@Field(ordinal = 2, length = 30)
private String lastName;
@Field(ordinal = 3, length = 30)
private String title;
@Field(ordinal = 4, length = 8)
private String salary;
@Field(ordinal = 5, format="MMddyyyy", length = 8)
private Date hireDate;
....}

输出文件内容:

Great Team
EmpF1 EmpL1 Developer 1 20150622
EmpF2 EmpL2 Developer 2 20150622

关于java - BeanIO 将带注释的类写入固定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com