【问题标题】:BeanIO write annotated class to fixedlengthBeanIO 将带注释的类写入固定长度
【发布时间】:2015-06-19 19:41:12
【问题描述】:

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

“无效字段 'employees',记录 'team',流 'Tm':找不到类型 '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;
...
}

【问题讨论】:

    标签: java bean-io


    【解决方案1】:

    快速解决方案是:

        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
    

    【讨论】:

    • 很好的例子。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2019-03-16
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多