Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Lectura y escritura de CSVs en Java

Introducción

Este es el primer artículo de una breve serie dedicada a las bibliotecas para leer y escribir CSV en Java.

Lectura y escritura de CSV en Core Java

Teniendo en cuenta la popularidad y el uso generalizado de CSV como formato para la transferencia de datos, hay muchas bibliotecas de análisis que se pueden usar junto con Java.
Los analizadores de terceros definen formatos comunes y pueden trabajar con varios delimitadores, manejar caracteres especiales y, a veces, incluso leer datos no binarios. Sin embargo, no todos los programas requieren todas esas características, por lo que aún es importante poder manejar archivos CSV con Java central, sin el uso de bibliotecas adicionales.
Una combinación simple de FileReaderBufferedReaderString.split()puede facilitar la lectura de datos de CSVs. Consideremos los pasos para abrir un archivo CSV básico y analizar los datos que contiene:
  • Utilice FileReaderpara abrir el archivo CSV
  • Cree un BufferedReaderlea el archivo línea por línea hasta que se alcance el carácter "Fin de archivo" ( EOF )
  • Utilice el String.split()método para identificar el delimitador de coma y dividir la fila en campos
BufferedReader csvReader = new BufferedReader(new FileReader(pathToCsv));  
while ((row = csvReader.readLine()) != null) {  
    String[] data = row.split(",");
    // do something with the data
}
csvReader.close();  
La datamatriz de cadenas contendrá una lista de los campos en cada fila del archivo encontrado en la pathToCsvubicación del archivo. Si el archivo CSV tiene un delimitador distinto de una coma, se puede especificar en el splitmétodo. Por ejemplo, otro delimitador común es la pestaña para archivos de Tab-Separated-Value (TSV).
Los datos se pueden pasar a un método separado para procesar o escribir en una base de datos desde el bucle, o se pueden almacenar en una colección de Java para su uso posterior. Por ejemplo, si está escribiendo una gran cantidad de datos en una base de datos, las infracciones de restricción (como las infracciones de la clave principal, por ejemplo) causadas por errores humanos al generar el CSV, se pueden evitar utilizando un mapa hash. Si hay una entrada duplicada en el CSV, el mapa hash almacenará la 'lectura' más reciente y sobrescribirá la entrada anterior.
Ya que está escribiendo el analizador desde cero, deberá encargarse del simple manejo de errores por su cuenta. Como si no está seguro de si el archivo existe, siempre es más seguro encerrar la operación de lectura dentro de un try/catchbloque o agregar lógica para determinar la existencia del archivo antes de procesarlo.
Para verificar si el archivo existe, se pueden realizar las siguientes modificaciones a nuestro código:
File csvFile = new File(pathToCsv);  
if (csvFile.isFile()) {  
    // create BufferedReader and read data from csv
}
Con un sencillo manejo de errores y requisitos estrictos en el formato CSV, crear un analizador simple utilizando los componentes centrales de Java es una tarea que la mayoría de los programadores pueden asumir.

Escribiendo CSVs en Core Java

La mayoría de los analizadores de terceros también admiten la escritura en archivos CSV. Sin embargo, hay una forma sencilla de escribir en archivos CSV, como cualquier otro tipo de archivo, sin usar bibliotecas.
La forma más sencilla es usar un FileWriterobjeto y tratar el archivo CSV como cualquier otro archivo de texto. En nuestro ejemplo, los datos se almacenan en algunos Listobjetos, los cuales solo iteramos y agregamos al escritor:
// Our example data
List<List<String>> rows = Arrays.asList(  
    Arrays.asList("Jean", "author", "Java"),
    Arrays.asList("David", "editor", "Python"),
    Arrays.asList("Scott", "editor", "Node.js")
);

FileWriter csvWriter = new FileWriter("new.csv");  
csvWriter.append("Name");  
csvWriter.append(",");  
csvWriter.append("Role");  
csvWriter.append(",");  
csvWriter.append("Topic");  
csvWriter.append("\n");

for (List<String> rowData : rows) {  
    csvWriter.append(String.join(",", rowData));
    csvWriter.append("\n");
}

csvWriter.flush();  
csvWriter.close();  
Al usar un FileWritersiempre asegúrese de vaciar y cerrar la corriente. Esto mejora el rendimiento de la operación de E / S e indica que no hay más datos que escribir en el flujo de salida.

Conclusión

Hay varias formas de leer y escribir archivos CSV en Java, la más simple es usar componentes Core Java. Aunque esto también lo deja más vulnerable a los errores y será menos robusto que una solución comprobada de terceros.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas