{"id":4193,"date":"2018-07-15T13:48:19","date_gmt":"2018-07-15T11:48:19","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4193"},"modified":"2018-07-15T13:48:19","modified_gmt":"2018-07-15T11:48:19","slug":"insel-apache-commons-csv","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2018\/07\/insel-apache-commons-csv\/","title":{"rendered":"Insel: Apache Commons CSV"},"content":{"rendered":"<p>Eine freie Java-Bibliothek zum Lesen und Schreiben von CSV-Dokumenten ist Apache Commons CSV (https:\/\/commons.apache.org\/proper\/commons-csv\/). Sie verwaltet unterschiedliche CSV-Formate wie Microsoft Excel, RFC 4180.<\/p>\n<p>Auf der Webseite gibt es einen Download-Link f\u00fcr das Java-Archiv, doch am einfachsten ist die Einbindung \u00fcber die Maven-POM-Datei \u2013 wir f\u00fcgen folgende Abh\u00e4ngigkeit hinzu:<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;commons-csv&lt;\/artifactId&gt;<\/p>\n<p>&lt;version&gt;1.5&lt;\/version&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>\u00dcber die Abh\u00e4ngigkeit bekommen wir neue Typen im Paket org.apache.commons.csv. Mit dem CSVPrinter lassen sich CSV-Dokumente korrekt erzeugen, und er behandelt auch Fluchtsymbole korrekt. Erzeugen wir ein CSV-Dokument im Speicher:<\/p>\n<p>StringBuilder appendable = new StringBuilder();<\/p>\n<p>CSVFormat csvFormat = CSVFormat.EXCEL.withHeader( &#8222;DisplayName&#8220;, &#8222;ISO3Language&#8220; );<\/p>\n<p>try ( CSVPrinter csvPrinter = new CSVPrinter( appendable, csvFormat ) ) {<\/p>\n<p>for ( Locale l : Arrays.copyOf( Locale.getAvailableLocales(), 5 ) )<\/p>\n<p>csvPrinter.printRecord( l.getDisplayName(), l.getISO3Language() );<\/p>\n<p>}<\/p>\n<p>Starten wir das Programm erscheint auf der Konsole:<\/p>\n<p>DisplayName,ISO3Language<\/p>\n<p>&#8222;&#8220;,<\/p>\n<p>Norwegisch Nynorsk,nno<\/p>\n<p>Arabisch (Jordanien),ara<\/p>\n<p>Bulgarisch,bul<\/p>\n<p>Kabuverdianu,kea<\/p>\n<p>Lesen wir das Dokument wieder ein und greifen dazu auf die Klasse CSVParser zur\u00fcck. Es gibt zwei Ans\u00e4tze:<\/p>\n<ol>\n<li>Da CSVParser ein Iterable&lt;CSVRecord&gt; ist, k\u00f6nnen wir direkt die Zeilen mit dem erweiterten for Das bietet sich f\u00fcr gr\u00f6\u00dfere Datenmengen an.<\/li>\n<li>Ist die Anzahl der Daten \u00fcberschaubar, liefert getRecords() eine gef\u00fcllte util.List&lt;CSVRecord&gt; mit alle Zeilen. Das kann praktisch sein, denn eine List hat eine stream()-Methode, sodass die Zeilen praktisch als Stream&lt;CSVRecord&gt; weiterverarbeitet werden k\u00f6nnen.<\/li>\n<\/ol>\n<p>Zum Programm:<\/p>\n<p>try ( StringReader reader = new StringReader( appendable.toString() );<\/p>\n<p>CSVParser csvParser = new CSVParser( reader,<\/p>\n<p>CSVFormat.EXCEL.withFirstRecordAsHeader() ) ) {<\/p>\n<p>for ( CSVRecord csvRecord : csvParser )<\/p>\n<p>System.out.printf( &#8222;Record=%d &#8211; %s, %s%n&#8220;,<\/p>\n<p>csvRecord.getRecordNumber(),<\/p>\n<p>csvRecord.get( 0 ), csvRecord.get( 1 ) );<\/p>\n<p>}<\/p>\n<p>Die Ausgabe ist:<\/p>\n<p>Record=1 &#8211; ,<\/p>\n<p>Record=2 &#8211; Norwegisch Nynorsk, nno<\/p>\n<p>Record=3 &#8211; Arabisch (Jordanien), ara<\/p>\n<p>Record=4 &#8211; Bulgarisch, bul<\/p>\n<p>Record=5 &#8211; Kabuverdianu, kea<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine freie Java-Bibliothek zum Lesen und Schreiben von CSV-Dokumenten ist Apache Commons CSV (https:\/\/commons.apache.org\/proper\/commons-csv\/). Sie verwaltet unterschiedliche CSV-Formate wie Microsoft Excel, RFC 4180. Auf der Webseite gibt es einen Download-Link f\u00fcr das Java-Archiv, doch am einfachsten ist die Einbindung \u00fcber die Maven-POM-Datei \u2013 wir f\u00fcgen folgende Abh\u00e4ngigkeit hinzu: &lt;dependency&gt; &lt;groupId&gt;org.apache.commons&lt;\/groupId&gt; &lt;artifactId&gt;commons-csv&lt;\/artifactId&gt; &lt;version&gt;1.5&lt;\/version&gt; &lt;\/dependency&gt; \u00dcber die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-4193","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4193"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4193\/revisions"}],"predecessor-version":[{"id":4194,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4193\/revisions\/4194"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}