Los ficheros CSV (Comma-Separated Values) son una forma popular de almacenar datos tabulares en texto plano, donde los valores se separan por comas (o un delimitador similar). Java ofrece varias formas de manejar ficheros CSV, desde métodos básicos hasta el uso de librerías especializadas como OpenCSV.
En este artículo, exploraremos cómo leer y escribir ficheros CSV simples y complejos, abordando ambos enfoques: con y sin librerías externas.
¿Qué es un Fichero CSV?
Un fichero CSV es un fichero de texto en el que los datos se organizan en filas y columnas, separados por un delimitador (generalmente una coma). Por ejemplo:
Nombre,Edad,País
Juan,25,España
Maria,30,México
- Fila: Cada línea del fichero representa una fila de la tabla.
- Columna: Cada valor separado por el delimitador corresponde a una columna.
Lectura y Escritura de Ficheros CSV Simples (Sin Librerías)
Lectura de un Fichero CSV
Usando clases como BufferedReader
y el método split()
de la clase String
, podemos leer un fichero línea por línea y dividir los valores en columnas.
Ejemplo:
import java.io.*;
public class LeerCSV {
public static void main(String[] args) {
String rutaFichero = "datos.csv";
String separador = ",";
try (BufferedReader br = new BufferedReader(new FileReader(rutaFichero))) {
String linea;
while ((linea = br.readLine()) != null) {
String[] columnas = linea.split(separador);
System.out.println("Nombre: " + columnas[0] + ", Edad: " + columnas[1] + ", País: " + columnas[2]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Escritura en un Fichero CSV
Para escribir datos en un fichero CSV, podemos usar BufferedWriter
y formatear las líneas con los valores separados por el delimitador.
Ejemplo:
import java.io.*;
public class EscribirCSV {
public static void main(String[] args) {
String rutaFichero = "datos.csv";
try (BufferedWriter bw = new BufferedWriter(new FileWriter(rutaFichero))) {
bw.write("Nombre,Edad,País");
bw.newLine();
bw.write("Juan,25,España");
bw.newLine();
bw.write("Maria,30,México");
System.out.println("Fichero CSV escrito correctamente.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Manejo de Ficheros CSV Complejos
Los ficheros CSV más avanzados pueden tener:
- Valores que contienen el delimitador (p. ej., una coma dentro de una celda).
- Valores que incluyen comillas dobles (
"
) o saltos de línea.
Para manejar estos casos, las soluciones básicas pueden no ser suficientes. Aquí es donde las librerías externas, como OpenCSV, son útiles.
Lectura y Escritura de Ficheros CSV con OpenCSV
Configuración de OpenCSV
Si usas Maven, agrega la siguiente dependencia en tu archivo pom.xml
:
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>
Lectura de un Fichero CSV con OpenCSV
OpenCSV simplifica el proceso, manejando automáticamente delimitadores y comillas.
Ejemplo:
import com.opencsv.CSVReader;
import java.io.*;
public class LeerCSVOpenCSV {
public static void main(String[] args) {
String rutaFichero = "datos.csv";
try (CSVReader reader = new CSVReader(new FileReader(rutaFichero))) {
String[] linea;
while ((linea = reader.readNext()) != null) {
System.out.println("Nombre: " + linea[0] + ", Edad: " + linea[1] + ", País: " + linea[2]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Escritura en un Fichero CSV con OpenCSV
Con OpenCSV, escribir datos en un fichero CSV es igualmente sencillo.
Ejemplo:
import com.opencsv.CSVWriter;
import java.io.*;
public class EscribirCSVOpenCSV {
public static void main(String[] args) {
String rutaFichero = "datos.csv";
try (CSVWriter writer = new CSVWriter(new FileWriter(rutaFichero))) {
// Escribir encabezado
writer.writeNext(new String[]{"Nombre", "Edad", "País"});
// Escribir datos
writer.writeNext(new String[]{"Juan", "25", "España"});
writer.writeNext(new String[]{"Maria", "30", "México"});
System.out.println("Fichero CSV escrito correctamente.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Comparativa: Métodos Básicos vs OpenCSV
Características | Métodos Básicos | OpenCSV |
---|---|---|
Facilidad de uso | Media | Alta |
Manejo de delimitadores | Requiere programación manual | Automático |
Soporte para comillas | Requiere lógica adicional | Soporte integrado |
Compatibilidad con Maven | No necesaria | Dependencia Maven requerida |
Consejos para Manejar Ficheros CSV
- Elegir el método adecuado: Usa métodos básicos para ficheros simples y OpenCSV para casos complejos.
- Gestionar excepciones: Maneja cuidadosamente
IOException
para garantizar la estabilidad del programa. - Validar datos: Antes de procesar un fichero CSV, verifica que el formato sea el esperado.
- Codificación: Asegúrate de usar la codificación adecuada (
UTF-8
) para evitar problemas con caracteres especiales.
Conclusión
La lectura y escritura de ficheros CSV es una tarea común en la programación, y Java ofrece varias herramientas para abordarla. Los métodos básicos son ideales para casos simples, mientras que librerías como OpenCSV son esenciales para manejar ficheros más complejos de manera eficiente. Con las técnicas y ejemplos proporcionados aquí, estarás listo para trabajar con ficheros CSV en tus proyectos. ¡Ponte manos a la obra!