nuiton-csv définit une api simple d'import-export au format CSV. Cette API permet de construire un modèle d'import (et/ou d'export) où les différentes préocupations sont bien séparées.
Pour un import, et pour chaque ligne à importer, il y a trois choses à faire :
La classe org.nuiton.csv.Import permet simplement d'effectuer des imports, une fois le modèle crée.
Pour un export et pour chaque objet à persister dans le fichier CSV, il y a aussi trois choses :
La classe org.nuiton.csv.Export permet simplement d'effectuer un export, une fois le modèle d'export crée et les données à persister récupérées.
// création du modèle d'import csv ImportModel<E> csvModel = null; // creation d'un importer à partir d'un modèle et d'un reader sur fichier csv Import<E> importer = Import.newImport(csvModel, reader); try { // parcours des objets crées à partir de chaque ligne du fichier csv for (E entity : importer) { // A vous :) } } finally { // fermeture de l'importer (ne ferme pas le flux d'entrée) importer.close(); }
MyImportModel extends AbstractImportModel<Entity> { public MyImportModel() { super(';'); } /** * Cette méthode sera appelée après lecture des headers et avant la validation des entêtes * par rapport au modèle. */ @Override public void pushCsvHeaderNames(List<String> headerNames) { super.pushCsvHeaderNames(headerNames); newMandatoryColumn("Column1"); newMandatoryColumn("Column2"); newMandatoryColumn("Column3"); if (header.contains("Type") { newMandatoryColumn("Type"); } else { // nom alternatif de Type = Ref newMandatoryColumn("Ref", "Type"); } } }
// création du modèle d'export CSV ExportModel<E> csvModel = null; // les données à exporter Iterable<E> datas = null; // création d'un exporter Export<E> exporter = Export.newExport(csvModel, datas); // lancement de l'export vers le fichier exporter.exportToFile(new File("output.csv"));