Hi while saving object by using openCsv the data getting stored in a single line and if i try to add more than one object the data getting deleted of the previous object. please if anyone knows the solution answer it here.
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());
}
}
}
When you try to write more than one object the last one is overwritten because the FileWriter you are passing to StatefulBeanToCsv
is not in append mode. You should specify the append mode in the FileWriter constructor.
Writer writer = new FileWriter(filePath, true);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(object);
writer.close();
Edit: This should solve multiple columns headers and column header not breaking line. It works for me.
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());
}
}
}
The function that resets the file:
public void cleanFile(String path) throws IOException {
FileWriter writer = new FileWriter(path); //Open as non-append to delete all data.
writer.write("");
writer.close();
}
To test the functions:
public void employeesToCsv() {
List<Employee> list = Arrays.asList(new Employee("101", "sunny"), new Employee("102", "Andrew"));
beanToCsvExport(list, "file.csv");
}
The achieved output:
"eId","eName"
"101","sunny"
"102","Andrew"