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ären eine Java Bean zu exportieren.
Am ehesten wäre noch OpenCSV in frage gekommen. Allerdings ist das die erste Bibliothek, die die Daten in einer „beliebigen“ Reihenfolge exportiert (alphabetisch, was normalerweise nicht die gewünschte Reihenfolge ist). Es ist zwar möglich, 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.
Die apache-commons-csv Bibliothek ist an sich sehr gut geeignet, zumal man gerade für große Datenmengen streambasiert arbeiten kann. Allerdings exportiert man dort quasi ein Array von Überschriften, und dann Arrays von den jeweiligen Inhalten. Das ist bei vielen Feldern recht unübersichtlich.
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.
Es gibt eine Reihe von Annotationen mit denen man Spaltennamen festlegen, Felder vom Export ausnehmen und Konverter definieren kann. Sogar die Reihenfolge kann verändert werden. Und es gibt Möglichkeiten, Felder von Basisklassen zu exportieren.
Dieses Projekt ist auf GitHub verfügbar. Es gibt hierzu eine neue Seite unter Portfolio. Das Release 1.0 ist auf maven central verfügbar.