Когда вы пытаетесь написать более одного объекта, последний перезаписывается, потому что FileWriter, который вы передаете StatefulBeanToCsv
, не находится в режиме добавления. Вы должны указать режим добавления в конструкторе 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 cleanFile(String path) throws IOException {
FileWriter writer = new FileWriter(path); //Open as non-append to delete all data.
writer.write("");
writer.close();
}
Для проверки функций:
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"