Créer un file CSV en Java

Je dois créer un file CSV dans un format spécifique. Voici le format.

“ROWHEAD”,2016/09/13 03:24:42 -0700,”A”,”BCDE”,002, “SECHEAD”,2016/09/12 00:00:00 -0700,2016/09/12 23:59:59 -0700,”BCDE” “COLHEAD”,”Col A”,”Col B”,”Col C”,”Col D”,”Col E”,”Col F” “SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” “SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” “SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” “SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” “SECFOOT”,”XXX”,0,0,0,0,”YY”,0,”ZZ”,0,189 “SECCOUNT”,1 "ROWFOOT”,”XXX”,0,0,0,0,”YY”,0,”ZZ”,0,189 

J'ai essayé d'utiliser les methods normales d'écriture de files qui ne pouvaient pas m'aider à atteindre cet objective. De même, j'ai essayé l'API openCSV pour la même chose, ce qui ne consortingbue pas beaucoup.

Comment puis-je créer un file CSV avec les valeurs d'en-tête et de bas de page qui y sont associées?

Obtenez uniVocity-parsers pour gérer cela. Il a un OutputValueSwitch qui correspond à une valeur dans une colonne particulière de chaque ligne pour déterminer un RowProcessor à utiliser.

Par exemple, si vos lignes d'input sont générées à partir de beans java (ce qui est probablement le cas), et d'autres lignes sont des lists simples de arrays d'objects:

  OutputValueSwitch writerSwitch = new OutputValueSwitch(0); //row identifiers go at column 0 // If the value is "ROWHEAD", we want to use an BeanWriterProcessor. You can provide field names to be associated with the fields in the class. writerSwitch.addSwitchForValue("ROWHEAD", new BeanWriterProcessor(RowHead.class)); writerSwitch.addSwitchForValue("SECHEAD", new BeanWriterProcessor(SecHead.class)); // If the value is "SECBODY", a ObjectRowWriterProcessor will be used. Let's assume you are writing object arrays here writerSwitch.addSwitchForValue("SECBODY", new ObjectRowWriterProcessor()); //...and so on. //Configure the CSV writer here CsvWriterSettings settings = new CsvWriterSettings(); // the writer should use the switch defined above settings.setRowWriterProcessor(writerSwitch); settings.getFormat().setLineSeparator("\n"); settings.setHeaderWritingEnabled(false); //etc //Create the CSV writer CsvWriter writer = new CsvWriter(new File("/path/to/your.csv"), "UTF-8", settings); writer.processRecord(new RowHead()); //writing bean writer.processRecord(new SecHead()); //writing the other bean writer.processRecord(new Object[]{"SECBODY", "Value 1", "Value 2", "etc"}); //writing an array writer.close(); 

Vous pouvez également utiliser les maps en tant que lignes d'input. Pour des exemples complets, consultez ceci et ceci

Vous pouvez faire n'importe quoi avec cette bibliothèque et j'espère que cela vous aidera.

Divulgation: Je suis l'auteur de cette bibliothèque. Il est open-source et gratuit (licence Apache V2.0).