使用JSEFA将不同类的java对象序列化到CSV中的一行中

使用JSEFA将不同类的java对象序列化到CSV中的一行中,java,csv,serialization,Java,Csv,Serialization,我使用JSEFA将java对象序列化为CSV中使用JSEFA的单行。 我在一个类中找到了46个字段 但现在的问题是我想把这个类分成不同的子类,这些子类保存信息,一个类包含前23个位置的CSV字段,下一个类包含剩余位置。当我尝试前缀方法时,它是将数据插入到两个不同的行中,但我需要将两个类的所有数据插入到一行中 有人能建议使用JSEFA或其他方法的最佳方法吗 第一个类包含前两个字段: @CsvDataType(defaultPrefix = "1") public class TestClass1

我使用JSEFA将java对象序列化为CSV中使用JSEFA的单行。 我在一个类中找到了46个字段

但现在的问题是我想把这个类分成不同的子类,这些子类保存信息,一个类包含前23个位置的CSV字段,下一个类包含剩余位置。当我尝试前缀方法时,它是将数据插入到两个不同的行中,但我需要将两个类的所有数据插入到一行中 有人能建议使用JSEFA或其他方法的最佳方法吗

第一个类包含前两个字段:

@CsvDataType(defaultPrefix = "1")

public class TestClass1 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 1)
private int id;

@CsvField(pos = 2)
private String Name;

public int getId() {
    return this.id;
}

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

public String getName() {
    return this.Name;
}

public void setName(final String name) {
    this.Name = name;
}
  }
@CsvDataType(defaultPrefix = "2")
 public class TestClass2 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 3)
private int orderno;

@CsvField(pos = 4)
private String orderName;

public int getOrderno() {
    return this.orderno;
}

public void setOrderno(final int orderno) {
    this.orderno = orderno;
}


public String getOrderName() {
    return orderName;
}


public void setOrderName(String orderName) {
    this.orderName = orderName;
}


  }
包含剩余两个字段的子类2:

@CsvDataType(defaultPrefix = "1")

public class TestClass1 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 1)
private int id;

@CsvField(pos = 2)
private String Name;

public int getId() {
    return this.id;
}

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

public String getName() {
    return this.Name;
}

public void setName(final String name) {
    this.Name = name;
}
  }
@CsvDataType(defaultPrefix = "2")
 public class TestClass2 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 3)
private int orderno;

@CsvField(pos = 4)
private String orderName;

public int getOrderno() {
    return this.orderno;
}

public void setOrderno(final int orderno) {
    this.orderno = orderno;
}


public String getOrderName() {
    return orderName;
}


public void setOrderName(String orderName) {
    this.orderName = orderName;
}


  }
组合的主要方法:

 public static void main(final String[] args) {

final File file = new File("/home/chandra/Documents/dataExcelFiles/final.csv");
    file.getParentFile().mkdirs();
 Serializer serializer = CsvIOFactory.createFactory(TestClass.class,  TestClass2.class).createSerializer();

    TestClass prod1 = new TestClass();

    prod1.setId(1);
    prod1.setName("HTC");

    TestClass2 prod2 = new TestClass2();
    prod2.setOrderno(512);
    prod2.setOrderName("HTC500");

    try {

        serializer.open(new FileWriter(file));
        serializer.write(prod1);
        serializer.write(prod2);
        serializer.close(true);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
使用这种方法输出如下:

  • 1 1 HTC
  • 2 512 HTC500
但我需要把所有的东西放在一排,像这样:

  • 1 HTC 512 HTC500
谢谢,
Chandra

serializer.write方法将写入一条记录。因为您将它与(jsefa类的不同参数)一起使用了两次,所以它会写入2条记录

你需要的是这样的东西:

第1小类:

@Embeddable
@CsvDataType
public class TestClass1 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 1)
private int id;

@CsvField(pos = 2)
private String Name;

// getter setter methods
}
第2小类:

@Embeddable
@CsvDataType
public class TestClass2 implements Serializable {

private static final long serialVersionUID = 371968159365574089L;

@CsvField(pos = 3)
private int orderno;

@CsvField(pos = 4)
private String orderName;

// getter setter methods
}
父类:

@CsvDataType()
public class TestClass {
    @CsvField ( pos = 1)
    private TestClass1 testClass1;
    @CsvField ( pos = 2)
    private TestClass2 testClass2;

    // getter setter methods
}
你的主要方法是:

public static void main(final String[] args) {

final File file = new File("/home/chandra/Documents/dataExcelFiles/final.csv");
    file.getParentFile().mkdirs();
 Serializer serializer = CsvIOFactory.createFactory(TestClass.class,  TestClass2.class).createSerializer();

    TestClass testClass = new TestClass();

    testClass.getTestClass1().setId(1);
    testClass.getTestClass1().setName("HTC");
    testClass.getTestClass2().setOrderno(512);
    testClass.getTestClass2().setOrderName("HTC500");

    try {

        serializer.open(new FileWriter(file));
        serializer.write(testClass);
        serializer.close(true);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
如果要使用默认前缀,可以在TestClass中将DefaultPrefix添加为“1”,并从TestClass1中删除“id”。也就是说,所有记录都将以“1”开头