domingo, 30 de marzo de 2014

Java: Creando archivos .CSV para Excel

Muchas veces es necesario exportar datos a un archivo para que sea manipulado en Excel por los usuarios. En esos casos, lo más rápido es exportar a archivos delimitados por coma (.CSV) ya que en realidad son simples archivos de texto con un delimitador (coma "," o punto-y-coma ";").
Cuando se trabaja con Java, una forma rápida de crear archivos cuando ya se tiene el texto en un String, es simplemente crear una variable FileWriter y escribir con el método "write" nuestro String, eureka! ya tenemos nuestro archivo.
Hasta ahí todo bien, pero el problema comienza cuando agregamos caracteres especiales, como por ejemplo letras con tildes (á, é, etc). Por defecto al escribir usando FileWriter la codificación utilizada es UTF-8, lo que está bien para agregar caracteres especiales, sin embargo, cuando el programa Excel abre uno de estos archivos no es capaz de reconocer la codificación correcta mostrando de forma errónea los caracteres especiales.
Para corregir esto, una forma fácil es agregar el caracter BOM al momento de comenzar escribir el archivo.
La forma de hacerlo:

FileWriter fwriter = new FileWriter(nombreArch); 
fwriter.write('\ufeff'); 
fwriter.write("El resto del texto"); 

Y taraaannn! ahora Excel reconoce de forma correcta la codificación del archivo y por ende muestra todos los caracteres como corresponde :D
En el caso de usar OutputFileStream, se recomienda utilizar el constructor donde se especifica la codificación a utilizar.

OutputStreamWriter(OutputStream out, Charset cs) 
InputStreamReader(InputStream in, Charset cs)

Eso es todo por ahora, más abajo dejo un ejemplo y algunas referencias.
No olviden comentar si tienen otras formas de corregir lo de la codificación ;)

-