[JAVA] Sortie CSV par Apache Commons CSV

introduction

Il n'est pas si difficile de produire du CSV, mais il y a des spécifications, et si vous sortez sans le savoir, vous pouvez vous retrouver avec quelque chose qui ignore les spécifications. Ou plutôt, j'ai essayé quelque chose de proche. Vous pouvez vérifier les spécifications elles-mêmes dans wiki ou Official Specifications. Java publie une bibliothèque pour Apache pour lire et écrire CSV, j'ai donc résumé la sortie en utilisant ceci. Ne lis pas.

Manuel officiel

De base

http://commons.apache.org/proper/commons-csv/

Javadoc http://commons.apache.org/proper/commons-csv/apidocs/index.html

À propos des paramètres initiaux

https://mvnrepository.com/artifact/org.apache.commons/commons-csv Lorsque vous utilisez Maven ou Gradle, vous pouvez obtenir groupId etc. en vous référant à ce qui précède. Pour le moment, le fonctionnaire a publié Lien de téléchargement, vous devriez donc pouvoir le télécharger et l'exécuter à partir d'ici (non confirmé) ..

Utilisation de base

Exemple simple est décrit dans CSVPrinter de Javadoc.

Exemple de description


try (CSVPrinter printer = new CSVPrinter(new FileWriter("csv.txt"), CSVFormat.EXCEL)) {
    printer.printRecord("id", "userName", "firstName", "lastName", "birthday");
    printer.printRecord(1, "john73", "John", "Doe", LocalDate.of(1973, 9, 15));
    printer.println();
    printer.printRecord(2, "mary", "Mary", "Meyer", LocalDate.of(1985, 3, 29));
} catch (IOException ex) {
    ex.printStackTrace();
}

Exemple de sortie


id,userName,firstName,lastName,birthday
1,john73,John,Doe,1973-09-15

2,mary,Mary,Meyer,1985-03-29

Explication ci-dessous.

CSVPrinter printer = new CSVPrinter(new FileWriter("csv.txt"), CSVFormat.EXCEL)

CSVPrinter est une instance de sortie CSV. CSVFormat.EXCEL est le format de sortie CSV. DEFAULT basé sur la RFC4180 (mais il y a quelques différences ) Et EXCEL selon les spécifications du fichier EXCEL. Je pense qu'il y a beaucoup d'autres choses, alors vérifiez Official Javadoc Bon à voir. Vous pouvez voir la différence entre eux en vérifiant Javadoc, mais certains paramètres ne sont liés qu'à la lecture de CSV.

printer.printRecord("id", "userName", "firstName", "lastName", "birthday");
printer.printRecord(1, "john73", "John", "Doe", LocalDate.of(1973, 9, 15));
printer.println();
printer.printRecord(2, "mary", "Mary", "Meyer", LocalDate.of(1985, 3, 29));

Une ligne de données est sortie par printRecord. Puisque l'argument est ʻObject, il peut recevoir d'autres chaînes que des chaînes de caractères. Rompre la ligne avec println. Si la valeur contient un délimiteur, elle sera sortie selon le format (si CSVFormat.EXCEL est utilisé, la valeur sera affichée entourée de" `).

Séparateur en valeur


printer.printRecord("te,st", "tester");

Exemple de sortie lorsque la valeur a un délimiteur


"te,st",tester

À propos des autres utilisations

production

En utilisant la méthode d'impression, 1 Il est possible de sortir non pas pour chaque enregistrement mais pour chaque valeur. Si vous l'exécutez en continu, il insérera automatiquement un délimiteur, mais même si vous essayez de l'utiliser en même temps que la méthode printRecord sur la même ligne, il n'insérera pas de délimiteur.

Utilisation combinée d'impression et d'impression


printer.print("test1");
printer.print("test2");
printer.printRecord("test3", "test4");

production


test1,test2test3,test4

Méthode PrintComment qui renvoie d'autres commentaires [Méthode PrintRecords] qui génère plusieurs lignes au lieu d'un seul enregistrement (http://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVPrinter.html#printRecords-java.lang .Object ...-) Quelque chose (printRecords est ResultSet Peut être considéré comme un argument), il est donc préférable de l'utiliser correctement au besoin.

Format CSV

Selon la façon dont vous utilisez CSVFormat, vous pouvez modifier le format CSV à l'avance. Dans l'exemple ci-dessous, une ligne d'en-tête est ajoutée à l'avance et le délimiteur est remplacé par un caractère de tabulation.

Correction du format CSV


CSVPrinter printer =
    CSVFormat.DEFAULT.withHeader("En-tête 1", "En-tête 2", "En-tête 3").withDelimiter('\t').print(writer);
printer.printRecord("a", "b", "c");

Exemple de sortie


En-tête 1 En-tête 2 En-tête 3
a	b	c

La ligne d'en-tête est ajoutée par la méthode withHeader et le délimiteur est modifié par la méthode withDelimiter. La dernière méthode print est pour obtenir une instance de CSVPrinter. Comme il y a diverses autres choses, vous pourrez changer le format du CSV que vous créez en les utilisant, mais il semble que la création d'un CSV que vous ne comprenez pas n'empêchera pas qu'il soit lu comme un CSV par d'autres applications. je veux

en conclusion

Je veux gérer CSV avec des fonctions standard.

Recommended Posts

Sortie CSV par Apache Commons CSV
Personnalisez la sortie avec la fonction de téléchargement CSV de Wagby
Importation CSV avec BOM
Sortie FizzBuzz avec flux
Convertissez de gros fichiers XLSX en CSV avec Apache POI
J'ai essayé de lire et de sortir CSV avec Outsystems
Échantillon répété avec Apache Freemarker
Vérifiez la valeur CSV avec RSpec
Démarrez Apache Solr avec Embedded.
Point d'ajustement Apache Commons BeanUtils
Accédez à Apache Kafka avec Micronaut
Sortie quatre-vingt-dix-neuf avec Stream
Contrôle de la sortie du journal avec Doma2
Sortie "Izumi Oishi" avec dokojava
Prend en charge 0 baisse dans la sortie CSV
Traitement de la sortie CSV avec Super-CSV
Routes de rails de sortie en tant que csv
Manipuler Excel avec Apache POI
Sortie d'Excel avec des formules avec XlsMapper
Sortie vers Excel en utilisant Apache POI!
Caractères de sortie comme une conversation avec JavaFX
Passez facilement des appels JDBC avec Commons DbUtils
Modèle de disjoncteur avec Apache Camel
Couverture de test de sortie avec Clover + Gradle
[Ruby on Rails] Fonction de sortie CSV
Téléchargez des fichiers volumineux avec Apache JMeter
Sortie PDF et TIFF avec Java 8
Redémarrez Apache avec l'image php-apache de Docker
FileUpload avec Rest sur Apache Wicket
[Linux] Démarrer le conteneur Apache avec Docker