我正在使用JSEFA使用JSEFA将我的java对象序列化为CSV格式的单行。 我在一个班级中有46个字段,
但现在问题是我想将这个类拆分为包含信息的不同子类,一个类包含前两个位置的CSV字段,下一个类包含剩余位置。当我尝试接近Prefix时,它将数据插入两个不同的行,但我需要将两个类的所有数据合并为一行 有些机构可以建议使用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;
}
}
子类2,其中包含剩余的两个字段:
@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();
}
}
使用这种方法就是这样:
但我需要把所有东西放在一行中,如下所示:
谢谢, 钱德拉
答案 0 :(得分:1)
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”
开头