Java OpenCSV所有数据都存储在单行版本(5.1)中,数据丢失
Hi使用openCsv保存对象时,数据存储在一行中,如果我尝试添加多个对象,则会删除前一个对象的数据。如果有人知道答案,请在这里回答Java OpenCSV所有数据都存储在单行版本(5.1)中,数据丢失,java,maven,file,csv,opencsv,Java,Maven,File,Csv,Opencsv,Hi使用openCsv保存对象时,数据存储在一行中,如果我尝试添加多个对象,则会删除前一个对象的数据。如果有人知道答案,请在这里回答 public final Logger log=Logger.getLogger("Error"); public void beanToCsvExport(final T object, final String filePath) { if(object == null) { log.warning("Initi
public final Logger log=Logger.getLogger("Error");
public void beanToCsvExport(final T object, final String filePath) {
if(object == null) {
log.warning("Initialization of object failed");
}else {
try {
Writer writer = new FileWriter(filePath);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(object);
writer.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (CsvDataTypeMismatchException e) {
System.out.println(e.getMessage());
} catch (CsvRequiredFieldEmptyException e) {
System.out.println(e.getMessage());
}
}
}
当您尝试写入多个对象时,最后一个对象将被覆盖,因为您要传递给
statefleBeantoCSV
的文件写入程序未处于附加模式。您应该在FileWriter构造函数中指定追加模式
Writer writer = new FileWriter(filePath, true);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(object);
writer.close();
编辑:这将解决多个列标题和列标题不换行的问题。它对我有用
public <T> void beanToCsvExport(final List<T> object, final String filePath) {
if (object == null) {
System.out.println("Initialization of object failed");
} else {
try {
cleanFile(filePath);
FileWriter writer = new FileWriter(filePath, true);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(object);
writer.close();
} catch (IOException | CsvDataTypeMismatchException | CsvRequiredFieldEmptyException e) {
System.out.println(e.getMessage());
}
}
}
要测试功能,请执行以下操作:
public void employeesToCsv() {
List<Employee> list = Arrays.asList(new Employee("101", "sunny"), new Employee("102", "Andrew"));
beanToCsvExport(list, "file.csv");
}
它在工作,谢谢你,但它没有切换线路。列标题出现的次数与我添加对象的次数相同。请尝试添加换行符:
writer.write(“\n”)代码>写入对象后。输出:“eId”、“eName”、“101”、“sunny”、“eId”、“eName”、“102”、“Andrew”如果您正在调用BeantOCV(对象)
,则每次都会为每个对象写入列标题。不是将类型为T的实例传递给beantocv
而是传递一个列表
,其中包含所有要编写的对象。我已经复制粘贴了相同的代码,您能告诉我为什么它对我不起作用吗?或者请将文件发送到kandelamanikanta@gmail.com非常感谢你的努力
public void employeesToCsv() {
List<Employee> list = Arrays.asList(new Employee("101", "sunny"), new Employee("102", "Andrew"));
beanToCsvExport(list, "file.csv");
}
"eId","eName"
"101","sunny"
"102","Andrew"