Manejar archivos CSV con Java

Para el que no sabe los archivos CSV son simples archivos de texto plano pero que respetan una estructura de tabla separando los valores con coma, de ahí el nombre (comma separated values). Estos archivos se usan mucho para exportar tablas como por ejemplo tablas DBF o archivos de Excel.
El temas es cuando tenemos que procesarlos con Java para hacer lo que queramos con los datos, si estás en el tema de Java seguramente pensás solucionar este problema tomando el archivo como un String y hacer un Split de la coma y guala, no está mal pero se complica cuando el .csv tiene un peso de 80 Mb :sorpresa: . Investigando por internet me encontré con un jar llamada JavaCSV la cual puedes bajar de aquí.
Luego de bajarlo su uso es muy simple, tenemos dos métodos fundamentales CsvReader para leer y CsvWriter para escribir archivos csv, vamos a ver un ejemplo de los dos:

Tomemos un archivo csv con la siguiente estructura:

ID,PRODUCTO,STOCK,PRECIO
1,MESA,124,65
2,SILLA,20,25.80
3,LAMPARA,68,30

Lo guardamos con el nombre “productos.csv” puedes usar un editor de CSV como Killink CSV Editor, Microsoft Excel o un simple editor de texto plano.

La forma de leerlo e imprimir cada campo por consola sería la siguiente clase:

import java.io.FileNotFoundException;
import java.io.IOException;

import com.csvreader.CsvReader;

public class leerCSV {

/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {

//Le pasamos la URL del archivo CSV a leer.
CsvReader reader = new CsvReader("C:productos.csv");
try {
while (reader.readRecord())
{
//reader.get(Integer) - devuelve el contenido del numero de columna que le pasamos.
String id = reader.get(0);
String producto = reader.get(1);
String stock = reader.get(2);
String precio = reader.get(3);
System.out.println("Filas: " + id + "-" + producto +
"-" + stock + "-" + precio);
}
} catch (IOException e) {
e.printStackTrace();
}

reader.close();

}

}

Cabe destacar que el metodo get(); puede recibir, tambien un String con el nombre de la columna que queremos recuperar, por  ejemplo reader.get(“PRECIO”); pero a mi no me funcionó, me devuelve un null.

Ya vimos como leer un csv, ahora vamos a ver como escribir uno:

import java.io.IOException;

import com.csvreader.CsvWriter;

public class escribirCSV {

/**
* @param args
*/
public static void main(String[] args) {
// Le pasamos el nombre del archivo CSV a generar.
CsvWriter writer = new CsvWriter ("C:productos.csv");

try {
//writer.write(String) - Escribe los campos separandolos con coma automaticamente.
writer.write("ID");

writer.write("PRODUCTO");

writer.write("STOCK");

writer.write("PRECIO");

//writer.endRecord() - Termina con la linea.
writer.endRecord();

writer.write ("1");

writer.write ("MESA");

writer.write ("124");

writer.write ("65");

writer.endRecord();

writer.write ("2");

writer.write ("SILLA");

writer.write ("20");

writer.write ("25.80");

writer.endRecord();

writer.write ("3");

writer.write ("LAMPARA");

writer.write ("68");

writer.write ("30");

writer.endRecord();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

writer.close();

}

}

}