Bibliotecas para leer y escribir CSVs en Java

Introducción

CSV significa valores separados por comas , un método de formato de datos que se ha utilizado incluso antes de que se generalizara el uso de computadoras personales. El formato ganó popularidad porque las primeras computadoras usaron tarjetas perforadas para procesar datos, y los valores separados por comas son más fáciles de "perforar" que los datos tradicionales con formato de tabla en columnas fijas.
En el presente, los archivos CSV se utilizan normalmente para transferir datos entre aplicaciones o sistemas, actuando como un formato común para exportar datos de un sistema e importarlos de nuevo a otro.
El formato CSV generalmente consiste en información organizada con líneas que consisten en múltiples campos separados por un delimitador, con una línea equivalente a un registro de datos. El delimitador puede ser un carácter de coma, punto y coma o tabulación. No hay un formato específico, aunque se ha introducido una especificación llamada RFC 4180 en un intento de estandarizar el comportamiento ideal de un archivo CSV.

RFC 4180

"RFC" significa Solicitud de comentarios , lo que significa que el documento está destinado a ser un conjunto de especificaciones o pautas comunes, y no reglas aceptadas.
Existen muchas desviaciones con respecto al formato especificado en la forma en que los archivos CSV son generados y leídos por las aplicaciones modernas, pero la mayoría de los sistemas se adhieren a las pautas iniciales establecidas por RFC 4180.
De acuerdo con RFC 4180, los archivos CSV deben tener los siguientes puntos en común:
  • Cada registro debe estar en una línea separada, con un salto de caracteres al final de la línea.
  • Puede o no puede haber una línea de encabezado. La presencia de un encabezado se puede especificar en el headerparámetro del tipo MIME .
  • El tipo MIME para los archivos CSV registrados oficialmente con IANA es "text / csv".
  • Cada registro puede constar de uno o más campos separados por comas, y el mismo número de campos debe persistir en todo el archivo (debe haber un número igual de campos en todos los registros).
  • Si un campo contiene comas, saltos de línea o comillas dobles, debe incluirse entre comillas dobles.

¿Por qué usar CSVs para operaciones de E / S con Java?

Los archivos CSV son legibles para los humanos, y más fáciles de entender que otros formatos de transferencia de datos como XML o JSON .
Los archivos CSV se pueden importar a la mayoría de las aplicaciones de hoja de cálculo como Excel , Google Sheets y OpenOffice Calc , y son fáciles de generar: un archivo .xls.xlsxarchivo existente se puede convertir a formato CSV dentro de Excel, siempre que el archivo contenga solo caracteres y no macros. imagenes, etc.
El formato es compacto y generalmente de tamaño más pequeño, lo que lleva a un procesamiento y generación más rápidos. En comparación, XML requiere repetición; por lo general, el nombre del encabezado de la columna se repite dos veces para cada fila con las etiquetas de inicio y finalización (junto con los caracteres relacionados con la sintaxis), mientras que CSV solo requiere los encabezados de columna una vez, generalmente en la primera fila.
Dados todos estos factores, ser capaz de leer y escribir en archivos CSV es una habilidad clave para cualquier desarrollador de 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, todavía 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.

Leyendo y escribiendo CSVs con Apache Commons CSV

La biblioteca de Apache Commons CSV es la versión de Apache Software Foundation de un analizador de Java CSV. De acuerdo con el resumen del proyecto , intenta " proporcionar una interfaz simple para leer y escribir archivos CSV de varios tipos ".
Al igual que con todas las bibliotecas asociadas con Apache, opera con una licencia de Apache , lo que significa que se puede usar, distribuir y modificar libremente.

Leer y escribir CSVs con OpenCSV

OpenCSV es uno de los analizadores de CSV más sencillos y fáciles de entender, utilizando estándares ReaderWriterclases y ofreciendo una CSVReaderimplementación en la parte superior.
Al igual que Apache Commons CSV, OpenCSV opera con una licencia Apache 2.0. Antes de descargar y decidir si usar los analizadores OpenCSVs, puede navegar a través del código fuente y los documentos Java , e incluso revisar su conjunto de pruebas JUnit, que se incluye en su repositorio git.

Bibliotecas de terceros para operaciones de IO de CSV

Saber cómo leer y escribir en un archivo CSV en Java central es importante, y generalmente es suficiente para la mayoría de las operaciones básicas. Sin embargo, hay casos en los que confiar en una biblioteca de terceros es el camino a seguir.
Por ejemplo, nuestro propio uso de splitpara analizar un archivo CSV, sin usar las bibliotecas anteriores, fallaría si los propios campos contengan comas. Podríamos ampliar nuestra lógica para adaptarse a este escenario, pero ¿por qué reinventar la rueda cuando ya existen soluciones probadas disponibles para su uso?
Aquí es donde entran las bibliotecas; la mayoría de ellas admiten varias configuraciones e identifican los caracteres de escape y los caracteres de final de archivo que los sistemas, las suites de productos y las bases de datos utilizan con frecuencia, para que no tengamos que rastrear, implementar y realizar pruebas unitarias de cada configuración Nosotros mismos.
Hay una multitud de bibliotecas de análisis diferentes disponibles de forma gratuita, cada una con diferentes puntos fuertes. Consideremos algunas de las bibliotecas más populares para el análisis de CSV con Java, comparando sus pros y sus contras.

Otras bibliotecas CSV

Además de Apache Commons CSV y OpenCSV, hay una variedad de otros analizadores CSV disponibles para su uso. Echemos un vistazo rápido a algunas de las otras bibliotecas y comparemos su uso , ventajas y desventajas:

SuperCSV

SuperCSV es otra biblioteca de análisis CSV dominante. La implementación de SuperCSV admite formatos que no son considerados por otros analizadores principales.
De manera similar a los métodos de anotación de OpenCSV, SuperCSV ofrece soporte POJO para tratar con Java Beans, además de las listas y mapas habituales.
La biblioteca también maneja la codificación y decodificación siempre que el archivo sea compatible con el formato descrito en la especificación SuperCSV . Si el archivo no es compatible, aún puede definir un delimitador personalizado, un carácter de comillas o un nuevo carácter de línea según sea necesario, o ampliar el código fuente para facilitar los requisitos específicos.
El análisis se hace más fácil gracias a las opciones de formato de datos disponibles con SuperCSV, que permite recortes y reemplazos de expresiones regulares durante el procesamiento. La biblioteca también admite entradas y salidas basadas en flujos, lo que la hace manejable en términos de rendimiento y sistemas con limitaciones de memoria.
La biblioteca SuperCSV también permite la lectura parcial y la escritura parcial, que no es compatible con los otros analizadores CSV que hemos analizado en este artículo. Puede elegir establecer valores de columna de encabezado específicos nully continuar con el procesamiento de las columnas restantes, o escribir un conjunto de datos que contenga valores opcionales sin agregar su propio manejo de errores.
Un gran inconveniente que merece mencionarse es que la biblioteca no parece mantenerse (la última fecha publicada es de hace cuatro años) en 2015, aunque el repositorio de git tiene contribuciones más recientes.

UniVocity CSV Parser

UniVocity CSV Parser en voz alta afirma ser el analizador CSV más rápido en una comparación de 2018 entre 18 analizadores diferentes de CSV disponibles públicamente. El analizador UniVocity le permite seleccionar los campos que desea analizar, omitiendo los campos innecesarios o no obligatorios en un solo archivo, lo que le permite filtrar columnas de un CSV.
Tiene más opciones de personalización que OpenCSV y Apache Commons CSV, lo que dificulta la configuración y el inicio. La legibilidad del código también podría ser menor en comparación con otras bibliotecas, ya que el analizador UniVocity requiere que el formato, el separador de línea y el método de extracción de encabezado se declaren antes de intentar el análisis.
En el lado positivo, la variedad de opciones de formato y personalización lo hace adecuado para tratar los "casos de borde" que involucran archivos CSV que no son compatibles con RFC4180.
De manera similar a OpenCSV y Apache Commons CSV, puede usar un iterador o una clase de analizador definida (en este caso, CsvParserTsvParser). Los analizadores CSV de UniVocity también admiten la lectura en beans con una configuración más compleja en comparación con OpenCSV.
La escritura es un proceso similarmente complicado, pero configurable con el analizador UniVocity CSV, con casos de uso específicos como la capacidad de definir conversiones de valores y la selección de columnas. También se admite la escritura directamente desde un mapa o Java Beans anotado.

FlatPack CSV Parser

FlatPack CSV Parser es rápido y más adecuado para manejar archivos extremadamente grandes, ya que se ocupa de la clasificación de archivos antes del análisis y el análisis de ancho fijo. Se puede usar en un escenario en el que su CSV no tiene un delimitador específico pero está compuesto de texto de ancho fijo, por ejemplo. El analizador también admite la asignación de columnas a través de especificaciones XML, donde los campos en el XML y los campos de datos en el CSV están en el mismo orden.
El BuffReaderDelimiterFactorypermite la transmisión de archivos más grandes para evitar todo lo que está contenido en la memoria al analizar los datos. Las columnas también se pueden agregar, eliminar o ignorar según sea necesario.
Como la biblioteca se enfoca en ser amigable para archivos más grandes, también permite la opción de excluir datos erróneos y agregarlos a una colección de errores para su posterior procesamiento. Esto evita que un conjunto de datos masivo deba ser reprocesado debido a uno o dos errores y simplifica el manejo de errores.
La biblioteca se mantiene actualmente, con la publicación más reciente en 2019. Tiene fortalezas específicas, pero puede ser complicada de configurar y entender debido a la multitud de opciones y características de personalización introducidas para manejar escenarios muy específicos que no son compatibles con RFC4180.

Conclusión

Los escenarios de lectura y escritura de CSV más básicos se pueden manejar mediante el uso de IO de Java con BufferedReaders, FileWriters, y el manejo de errores personalizado. Sin embargo, las bibliotecas externas proporcionan soluciones probadas y comprobadas cuando se trata de operaciones más complejas que implican poder admitir archivos más grandes que pueden o no ser compatibles con RFC 4180, con diferentes delimitadores y diferentes requisitos.
El rendimiento y la flexibilidad de su aplicación dependen de la opción que elija: algunos analizadores son mejores en la administración de memoria, mientras que otros son más flexibles y personalizables.
Puede usar este artículo como una guía para identificar qué biblioteca se adapta mejor a sus necesidades y aprender los conceptos básicos del manejo de archivos CSV y leer y escribir CSV en Java.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.