I am using opencsv-4.0
to write a csv file and I need to add column headers in output file.
Here is my code.
public static void buildPro
You can append by annotation
public void export(List list, PrintWriter writer) throws Exception {
writer.append( buildHeader( YourObject.class ) );
StatefulBeanToCsvBuilder builder = new StatefulBeanToCsvBuilder<>( writer );
StatefulBeanToCsv beanWriter = builder.build();
beanWriter.write( mapper.map( list ) );
writer.close();
}
private String buildHeader(Class clazz) {
return Arrays.stream( clazz.getDeclaredFields() )
.filter( f -> f.getAnnotation( CsvBindByPosition.class ) != null
&& f.getAnnotation( CsvBindByName.class ) != null )
.sorted( Comparator.comparing( f -> f.getAnnotation( CsvBindByPosition.class ).position() ) )
.map( f -> f.getAnnotation( CsvBindByName.class ).column() )
.collect( Collectors.joining( "," ) ) + "\n";
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class YourObject {
@CsvBindByPosition(position = 0)
@CsvBindByName(column = "A")
private Long a;
@CsvBindByPosition(position = 1)
@CsvBindByName(column = "B")
private String b;
@CsvBindByPosition(position = 2)
@CsvBindByName(column = "C")
private String c;
}