Leer y escribir CSV en Java

    Introducci贸n

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

    Lectura y escritura de archivos CSV en Core Java

    Debido a la popularidad y el uso generalizado de CSV como formato para la transferencia de datos, existen muchas bibliotecas de analizadores 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 es importante poder manejar archivos CSV con el n煤cleo de Java, sin el uso de bibliotecas adicionales.

    Una simple combinaci贸n de FileReader, BufferedReadery String.split() puede facilitar la lectura de datos de CSV. Consideremos los pasos para abrir un archivo CSV b谩sico y analizar los datos que contiene:

    • Utilizar FileReader para abrir el archivo CSV
    • Crear un BufferedReader y lea el archivo l铆nea por l铆nea hasta un “Fin de archivo” (EOF) personaje se alcanza
    • Utilizar 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();
    

    los data La matriz de cadenas contendr谩 una lista de los campos en cada fila del archivo que se encuentra en el pathToCsv ubicaci贸n del archivo. Si el archivo CSV tiene un delimitador que no sea una coma, se puede especificar en el split m茅todo. Por ejemplo, otro delimitador com煤n es la pesta帽a para archivos de valores separados por tabulaciones (TSV).

    Los datos se pueden pasar a un m茅todo separado para procesarlos o escribirlos en una base de datos desde dentro del bucle, o se pueden almacenar en una colecci贸n Java para su uso posterior. Por ejemplo, si est谩 escribiendo una gran cantidad de datos en una base de datos, las violaciones de restricciones (como las violaciones 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.

    Dado que est谩 escribiendo el analizador desde cero, deber谩 encargarse del manejo simple de errores por su cuenta. Por ejemplo, si no est谩 seguro de si el archivo existe, siempre es m谩s seguro incluir la operaci贸n de lectura dentro de un try/catch bloquear o agregar l贸gica para determinar la existencia del archivo antes de procesarlo.

    Para comprobar si el archivo existe, se puede realizar la siguiente modificaci贸n a nuestro c贸digo:

    File csvFile = new File(pathToCsv);
    if (csvFile.isFile()) {
        // create BufferedReader and read data from csv
    }
    

    Con un manejo de errores simple y requisitos estrictos en el formato CSV, crear un analizador simple usted mismo utilizando componentes centrales de Java es una tarea que la mayor铆a de los programadores pueden asumir.

    Escribir CSV en Core Java

    La mayor铆a de los analizadores de terceros tambi茅n admiten la escritura en archivos CSV. Sin embargo, existe una forma sencilla de escribir en archivos CSV, como cualquier otro tipo de archivo, sin utilizar bibliotecas.

    La forma m谩s sencilla es utilizar un FileWriter objeto y tratar el archivo CSV como cualquier otro archivo de texto. En nuestro ejemplo, los datos se almacenan en algunos List objetos, que simplemente 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();
    

    Cuando se usa un FileWriter Aseg煤rese siempre de enjuagar y cerrar la corriente. Esto mejora el rendimiento de la operaci贸n de E / S e indica que no hay m谩s datos para 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 errores y ser谩 menos robusto que una soluci贸n probada de terceros.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *