StatefulBeanToCsv with Column headers

后端 未结 3 1090
长发绾君心
长发绾君心 2021-01-02 04:41

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         


        
3条回答
  •  北海茫月
    2021-01-02 05:16

    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;
    
    }
    

提交回复
热议问题