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