javacsv example ejemplo csvwriter commons java csv
http://sourceforge.net/projects/javacsv/files/JavaCsv/JavaCsv%202.1/javacsv2.1.zip/download

example - java commons csv



CSV API para Java (10)

¿Alguien puede recomendar una API simple que me permita usar leer un archivo de entrada CSV, hacer algunas transformaciones simples y luego escribirlo?

Un rápido google ha encontrado http://flatpack.sourceforge.net/ que parece prometedor.

Solo quería comprobar lo que otros están usando antes de unirme a esta API.


CSV Apache Commons

mira el de apache .


El formato CSV parece bastante fácil para StringTokenizer, pero puede volverse más complicado. Aquí en Alemania, un punto y coma se usa como delimitador y las celdas que contienen delimitadores deben escaparse. No vas a manejar eso fácilmente con StringTokenizer.

Me gustaría ir a http://sourceforge.net/projects/javacsv


He usado OpenCSV en el pasado.

import au.com.bytecode.opencsv.CSVReader;

String fileName = "data.csv"; CSVReader reader = new CSVReader(new FileReader(fileName ));

// if the first line is the header String[] header = reader.readNext();
// iterate over reader.readNext until it returns null String[] line = reader.readNext();

Hubo algunas otras opciones en las respuestas a otra pregunta .


Leer la descripción del formato CSV me hace sentir que usar una biblioteca de terceros sería menos dolor de cabeza que escribirlo yo mismo:

Wikipedia enumera 10 o algunas bibliotecas conocidas:

Comparé las librerías enumeradas usando algún tipo de lista de verificación. OpenCSV resultó ser un ganador para mí (YMMV) con los siguientes resultados:

+ maven + maven - release version // had some cryptic issues at _Hudson_ with snapshot references => prefer to be on a safe side + code examples + open source // as in "can hack myself if needed" + understandable javadoc // as opposed to eg javadocs of _genjava gj-csv_ + compact API // YAGNI (note *flatpack* seems to have much richer API than OpenCSV) - reference to specification used // I really like it when people can explain what they''re doing - reference to _RFC 4180_ support // would qualify as simplest form of specification to me - releases changelog // absence is quite a pity, given how simple it''d be to get with maven-changes-plugin // _flatpack_, for comparison, has quite helpful changelog + bug tracking + active // as in "can submit a bug and expect a fixed release soon" + positive feedback // Recommended By 51 users at sourceforge (as of now)


Para la última aplicación empresarial en la que trabajé que necesitaba manejar una notable cantidad de CSV, hace un par de meses, utilicé SuperCSV en sourceforge y me pareció simple, robusto y sin problemas.


Puede usar la aplicación csvreader y descargar desde la siguiente ubicación:

http://sourceforge.net/projects/javacsv/files/JavaCsv/JavaCsv%202.1/javacsv2.1.zip/download

o

JavaCSV

Usa el siguiente código:

/ ************ For Reading ***************/ import java.io.FileNotFoundException; import java.io.IOException; import com.csvreader.CsvReader; public class CsvReaderExample { public static void main(String[] args) { try { CsvReader products = new CsvReader("products.csv"); products.readHeaders(); while (products.readRecord()) { String productID = products.get("ProductID"); String productName = products.get("ProductName"); String supplierID = products.get("SupplierID"); String categoryID = products.get("CategoryID"); String quantityPerUnit = products.get("QuantityPerUnit"); String unitPrice = products.get("UnitPrice"); String unitsInStock = products.get("UnitsInStock"); String unitsOnOrder = products.get("UnitsOnOrder"); String reorderLevel = products.get("ReorderLevel"); String discontinued = products.get("Discontinued"); // perform program logic here System.out.println(productID + ":" + productName); } products.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

Escribir / Anexar al archivo CSV

Código:

/************* For Writing ***************************/ import java.io.File; import java.io.FileWriter; import java.io.IOException; import com.csvreader.CsvWriter; public class CsvWriterAppendExample { public static void main(String[] args) { String outputFile = "users.csv"; // before we open the file check to see if it already exists boolean alreadyExists = new File(outputFile).exists(); try { // use FileWriter constructor that specifies open for appending CsvWriter csvOutput = new CsvWriter(new FileWriter(outputFile, true), '',''); // if the file didn''t already exist then we need to write out the header line if (!alreadyExists) { csvOutput.write("id"); csvOutput.write("name"); csvOutput.endRecord(); } // else assume that the file already has the correct header line // write out a few records csvOutput.write("1"); csvOutput.write("Bruce"); csvOutput.endRecord(); csvOutput.write("2"); csvOutput.write("John"); csvOutput.endRecord(); csvOutput.close(); } catch (IOException e) { e.printStackTrace(); } } }


Si tiene la intención de leer csv de excel, entonces hay algunos casos de esquina interesantes. No puedo recordarlos a todos, pero apache commons csv no era capaz de manejarlo correctamente (con, por ejemplo, URL).

Asegúrese de probar la salida de Excel con comillas y comas y barras por todos lados.


También hay CSV / Excel Utility . Asume que todos estos datos son de tipo tabla y entregan datos de Iteradores.


Usamos JavaCSV , funciona bastante bien


Actualización: el código en esta respuesta es para Super CSV 1.52. Se pueden encontrar ejemplos de códigos actualizados para Super CSV 2.4.0 en el sitio web del proyecto: http://super-csv.github.io/super-csv/index.html

El proyecto SuperCSV admite directamente el análisis y la manipulación estructurada de células CSV. Desde http://super-csv.github.io/super-csv/examples_reading.html encontrarás, por ejemplo,

dada una clase

public class UserBean { String username, password, street, town; int zip; public String getPassword() { return password; } public String getStreet() { return street; } public String getTown() { return town; } public String getUsername() { return username; } public int getZip() { return zip; } public void setPassword(String password) { this.password = password; } public void setStreet(String street) { this.street = street; } public void setTown(String town) { this.town = town; } public void setUsername(String username) { this.username = username; } public void setZip(int zip) { this.zip = zip; } }

y que tiene un archivo CSV con un encabezado. Supongamos el siguiente contenido

username, password, date, zip, town Klaus, qwexyKiks, 17/1/2007, 1111, New York Oufu, bobilop, 10/10/2007, 4555, New York

A continuación, puede crear una instancia de UserBean y completarla con los valores de la segunda línea del archivo con el siguiente código

class ReadingObjects { public static void main(String[] args) throws Exception{ ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE); try { final String[] header = inFile.getCSVHeader(true); UserBean user; while( (user = inFile.read(UserBean.class, header, processors)) != null) { System.out.println(user.getZip()); } } finally { inFile.close(); } } }

usando la siguiente "especificación de manipulación"

final CellProcessor[] processors = new CellProcessor[] { new Unique(new StrMinMax(5, 20)), new StrMinMax(8, 35), new ParseDate("dd/MM/yyyy"), new Optional(new ParseInt()), null };