Introducción
Los archivos CSV (Comma Separated Values) son un formato común para almacenar datos en texto plano, donde cada línea representa un registro y los valores de los campos están separados por comas. Este formato es ampliamente utilizado debido a su simplicidad y compatibilidad con muchas aplicaciones. En este artículo explicaremos cómo trabajar con ficheros CSV en Java, leyendo y escribiendo datos, tanto de manera manual como utilizando librerías como OpenCSV para manejar casos más complejos.
Lectura de un archivo CSV simple
Un archivo CSV simple no contiene comillas ni caracteres especiales que puedan interferir con los separadores. Para leer este tipo de archivos en Java, podemos utilizar la clase BufferedReader
en conjunto con FileReader
, y dividir las líneas en valores individuales utilizando el método split()
de la clase String
.
Ejemplo 1: Leer un archivo CSV simple
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LeerCSVSimple {
public static void main(String[] args) {
String archivoCSV = "datos.csv";
String linea;
String separador = ",";
try (BufferedReader br = new BufferedReader(new FileReader(archivoCSV))) {
while ((linea = br.readLine()) != null) {
String[] valores = linea.split(separador);
for (String valor : valores) {
System.out.print(valor + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Explicación del código:
BufferedReader
se utiliza para leer el archivo línea por línea.split(separador)
divide la línea en valores separados por comas.- Los valores se imprimen en la consola en formato de lista.
Lectura de un archivo CSV con valores entrecomillados
En un archivo CSV más complejo, los valores pueden contener comas o comillas. Para lidiar con estos casos, se utiliza un formato donde los valores están entrecomillados, y cualquier comilla dentro del valor se representa con comillas dobles.
El siguiente código muestra cómo procesar este tipo de archivos utilizando expresiones regulares para eliminar las comillas.
Ejemplo 2: Quitar comillas de valores en un archivo CSV
public class ProcesarCSV {
public static String[] quitarComillas(String[] valores) {
String[] resultados = new String[valores.length];
for (int i = 0; i < valores.length; i++) {
resultados[i] = valores[i].replaceAll("^\"|\"$", "");
}
return resultados;
}
}
Explicación del código:
- El método
replaceAll("^\"|\"$", "")
elimina las comillas al principio y al final de cada valor utilizando expresiones regulares. - El array de
String
procesado es devuelto con los valores sin comillas.
Lectura y escritura de un archivo CSV complejo usando OpenCSV
Cuando trabajamos con archivos CSV más complicados, como aquellos que contienen comas y comillas dentro de los valores, se recomienda usar una librería especializada como OpenCSV. Esta librería simplifica el proceso de lectura y escritura de CSV, gestionando automáticamente los separadores y las comillas.
Para usar OpenCSV, primero debemos incluir la dependencia en el proyecto:
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>3.7</version>
</dependency>
Ejemplo 3: Leer un archivo CSV usando OpenCSV
import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
public class LeerCSVConOpenCSV {
public static void main(String[] args) {
String archivoCSV = "datos_complejos.csv";
try (CSVReader csvReader = new CSVReader(new FileReader(archivoCSV))) {
String[] valores;
while ((valores = csvReader.readNext()) != null) {
for (String valor : valores) {
System.out.print(valor + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Explicación del código:
- OpenCSV se encarga de manejar automáticamente los valores entrecomillados y las comas dentro de los valores.
- El método
readNext()
devuelve un array deString
con los valores de cada línea.
Ejemplo 4: Escribir un archivo CSV usando OpenCSV
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class EscribirCSVConOpenCSV {
public static void main(String[] args) {
String archivoCSV = "datos_salida.csv";
try (CSVWriter csvWriter = new CSVWriter(new FileWriter(archivoCSV))) {
String[] encabezado = { "Nombre", "Edad", "Ciudad" };
String[] datos1 = { "Juan", "30", "Madrid" };
String[] datos2 = { "Ana", "25", "Barcelona" };
csvWriter.writeNext(encabezado);
csvWriter.writeNext(datos1);
csvWriter.writeNext(datos2);
System.out.println("Archivo CSV escrito con éxito.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Explicación del código:
CSVWriter
se utiliza para escribir datos en formato CSV.writeNext()
escribe una línea en el archivo CSV.
Conclusión
El manejo de archivos CSV en Java puede variar desde una solución manual para archivos simples hasta el uso de librerías como OpenCSV para casos más complejos. OpenCSV facilita la lectura y escritura de archivos CSV con comillas y comas dentro de los valores, permitiendo un enfoque más robusto para archivos CSV complejos. Con los ejemplos proporcionados, puedes empezar a trabajar con archivos CSV en tus proyectos Java, adaptando la solución según la complejidad del archivo.