{"id":703,"date":"2020-04-05T22:46:07","date_gmt":"2020-04-05T20:46:07","guid":{"rendered":"http:\/\/landmesser.me\/?p=703"},"modified":"2020-04-10T14:11:52","modified_gmt":"2020-04-10T12:11:52","slug":"java-projekt-simplecsv-auf-github","status":"publish","type":"post","link":"https:\/\/landmesser.me\/?p=703","title":{"rendered":"Java Projekt simplecsv auf GitHub"},"content":{"rendered":"\n<p>Als ich die Aufgabe hatte ein paar Daten aus einer CouchDb nach CSV zu exportieren, ergaben meine Recherchen keine wirklich brauchbaren Binliotheken, die in der Lage w\u00e4ren eine Java Bean zu exportieren.<\/p>\n\n\n\n<p>Am ehesten w\u00e4re noch <a href=\"http:\/\/opencsv.sourceforge.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenCSV<\/a> in frage gekommen. Allerdings ist das die erste Bibliothek, die die Daten in einer \u201ebeliebigen\u201c Reihenfolge exportiert (alphabetisch, was normalerweise nicht die gew\u00fcnschte Reihenfolge ist). Es ist zwar m\u00f6glich, die Felder in einer vorgegebenen Reihenfolge zu exportieren, dann aber nicht mit benutzerdefinierten Feldnamen. Man kann sich da zwar was zurechtfrickeln, aber das ist nicht wirklich das, was man will.<\/p>\n\n\n\n<p>Die <a href=\"http:\/\/commons.apache.org\/proper\/commons-csv\/\" target=\"_blank\" rel=\"noreferrer noopener\">apache-commons-csv<\/a> Bibliothek ist an sich sehr gut geeignet, zumal man gerade f\u00fcr gro\u00dfe Datenmengen streambasiert arbeiten kann. Allerdings exportiert man dort quasi ein Array von \u00dcberschriften, und dann Arrays von den jeweiligen Inhalten. Das ist bei vielen Feldern recht un\u00fcbersichtlich.<\/p>\n\n\n\n<p>Daher habe ich nun eine Bibliothek simplecsv geschrieben, mit der man Objekte eines bestimmten Typs exportieren kann. Dazu werden alle Felder der Klasse in der Reihenfolge, in der sie angegeben sind, exportiert. Die Bibliothek basiert auf apache-commons-csv, so dass man einen Stream von Objekten hauptspeichersparend exportieren kann.<\/p>\n\n\n\n<p>Es gibt eine Reihe von Annotationen mit denen man Spaltennamen festlegen, Felder vom Export ausnehmen und Konverter definieren kann. Sogar die Reihenfolge kann ver\u00e4ndert werden. Und es gibt M\u00f6glichkeiten, Felder von Basisklassen zu exportieren.<\/p>\n\n\n\n<p>Dieses Projekt ist auf <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/bmilcke\/simplecsv\" target=\"_blank\">GitHub<\/a> verf\u00fcgbar. Es gibt hierzu eine <a href=\"http:\/\/landmesser.me\/?page_id=681\">neue Seite<\/a> unter Portfolio. Das Release 1.0 ist auf <a rel=\"noreferrer noopener\" href=\"https:\/\/search.maven.org\/search?q=g:me.landmesser.simplecsv%20AND%20a:simplecsv\" target=\"_blank\">maven central<\/a> verf\u00fcgbar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Als ich die Aufgabe hatte ein paar Daten aus einer CouchDb nach CSV zu exportieren, ergaben meine Recherchen keine wirklich brauchbaren Binliotheken, die in der Lage w\u00e4ren eine Java Bean zu exportieren. Am ehesten w\u00e4re noch OpenCSV in frage gekommen. &hellip; <a href=\"https:\/\/landmesser.me\/?p=703\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-703","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/posts\/703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/landmesser.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=703"}],"version-history":[{"count":8,"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/posts\/703\/revisions"}],"predecessor-version":[{"id":713,"href":"https:\/\/landmesser.me\/index.php?rest_route=\/wp\/v2\/posts\/703\/revisions\/713"}],"wp:attachment":[{"href":"https:\/\/landmesser.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/landmesser.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/landmesser.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}