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 *