implementing BAEL-6833 (#14912)
Co-authored-by: technoddy <mail.technoddy@gmail.com>
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
package com.baeldung.java.io.pojotocsv;
|
||||
|
||||
public record Application(String id, String name, Integer age, String created_at) {
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.baeldung.java.io.pojotocsv;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
|
||||
public record ApplicationWithAnnotation(@CsvBindByName(column = "id", required = true) @CsvBindByPosition(position = 1) String id, @CsvBindByName(column = "name", required = true) @CsvBindByPosition(position = 0) String name,
|
||||
@CsvBindByName(column = "age", required = true) @CsvBindByPosition(position = 2) Integer age, @CsvBindByName(column = "position", required = true) @CsvBindByPosition(position = 3) String created_at) {
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.baeldung.java.io.pojotocsv;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import com.opencsv.CSVWriter;
|
||||
import com.opencsv.bean.StatefulBeanToCsvBuilder;
|
||||
import com.opencsv.exceptions.CsvDataTypeMismatchException;
|
||||
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
|
||||
|
||||
public class BeanToCsv {
|
||||
|
||||
public void beanToCSVWithDefault(List<Application> applications) throws Exception {
|
||||
try (FileWriter writer = new FileWriter("src/main/resources/application.csv")) {
|
||||
var builder = new StatefulBeanToCsvBuilder<Application>(writer).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.withSeparator(',')
|
||||
.build();
|
||||
builder.write(applications);
|
||||
}
|
||||
}
|
||||
|
||||
public void beanToCSVWithCustomHeaderStrategy(List<Application> applications) throws IOException, CsvRequiredFieldEmptyException, CsvDataTypeMismatchException {
|
||||
try (FileWriter writer = new FileWriter("src/main/resources/application2.csv")) {
|
||||
var mappingStrategy = new CustomHeaderStrategy<Application>();
|
||||
mappingStrategy.setType(Application.class);
|
||||
|
||||
var builder = new StatefulBeanToCsvBuilder<Application>(writer).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.withMappingStrategy(mappingStrategy)
|
||||
.build();
|
||||
builder.write(applications);
|
||||
}
|
||||
}
|
||||
|
||||
public void beanToCSVWithCustomPositionStrategy(List<ApplicationWithAnnotation> applications) throws Exception {
|
||||
try (FileWriter writer = new FileWriter("src/main/resources/application3.csv")) {
|
||||
var builder = new StatefulBeanToCsvBuilder<ApplicationWithAnnotation>(writer).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.build();
|
||||
builder.write(applications);
|
||||
}
|
||||
}
|
||||
|
||||
public void beanToCSVWithCustomHeaderAndPositionStrategy(List<ApplicationWithAnnotation> applications) throws IOException, CsvRequiredFieldEmptyException, CsvDataTypeMismatchException {
|
||||
try (FileWriter writer = new FileWriter("src/main/resources/application4.csv")) {
|
||||
var mappingStrategy = new CustomColumnPositionStrategy<ApplicationWithAnnotation>();
|
||||
mappingStrategy.setType(ApplicationWithAnnotation.class);
|
||||
|
||||
var builder = new StatefulBeanToCsvBuilder<ApplicationWithAnnotation>(writer).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.withMappingStrategy(mappingStrategy)
|
||||
.build();
|
||||
builder.write(applications);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.baeldung.java.io.pojotocsv;
|
||||
|
||||
import com.opencsv.bean.ColumnPositionMappingStrategy;
|
||||
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
|
||||
|
||||
public class CustomColumnPositionStrategy<T> extends ColumnPositionMappingStrategy<T> {
|
||||
@Override
|
||||
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {
|
||||
super.generateHeader(bean);
|
||||
return super.getColumnMapping();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.baeldung.java.io.pojotocsv;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
|
||||
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
|
||||
|
||||
public class CustomHeaderStrategy<T> extends HeaderColumnNameMappingStrategy<T> {
|
||||
@Override
|
||||
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {
|
||||
String[] header = super.generateHeader(bean);
|
||||
return Arrays.stream(header)
|
||||
.map(String::toLowerCase)
|
||||
.toArray(String[]::new);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
AGE,CREATED_AT,ID,NAME
|
||||
34,2023-08-11,123,Sam
|
||||
44,2023-02-11,456,Tam
|
||||
54,2023-03-11,890,Jam
|
||||
|
@@ -0,0 +1,4 @@
|
||||
age,created_at,id,name
|
||||
34,2023-08-11,123,Sam
|
||||
44,2023-02-11,456,Tam
|
||||
54,2023-03-11,890,Jam
|
||||
|
@@ -0,0 +1,3 @@
|
||||
Sam,123,34,2023-08-11
|
||||
Tam,456,44,2023-02-11
|
||||
Jam,789,54,2023-03-11
|
||||
|
@@ -0,0 +1,4 @@
|
||||
name,id,age,created_at
|
||||
Sam,123,34,2023-08-11
|
||||
Tam,456,44,2023-02-11
|
||||
Jam,789,54,2023-03-11
|
||||
|
Reference in New Issue
Block a user