Saltar al contenido principal

Ficheros CSV

Lectura

Leer archivos CSV en Java puede hacerse de varias formas, dependiendo de cómo quieras procesar los datos. El formato CSV (Comma Separated Values) es un formato simple que contiene datos separados por comas (u otro delimitador, como punto y coma, según el caso). Existen varias librerías y técnicas que puedes usar para leer archivos CSV en Java.

El siguiente ejemplo muestra un método manual utilizando la clase BufferedReader para leer el archivo línea a línea y la función String.split() para separar los valores de cada línea basada en el delimitador (coma, por ejemplo).

LeerCSVEjemplo
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LeerCSVEjemplo {
public static void main(String[] args) {
String rutaArchivo = "ejemplo.csv";
ArrayList<ArrayList<String>> datos = new ArrayList<>();

// Try con recursos
try (BufferedReader reader = new BufferedReader(new FileReader(rutaArchivo))) {
String linea;
while ((linea = reader.readLine()) != null) {
// Separar la línea en campos usando la coma como delimitador
String[] campos = linea.split(",");

// Procesar los campos (p. ej., imprimir)
ArrayList<String> camposList = new ArrayList<>();
for (String campo : campos) {
camposList.add(campo);
}
datos.add(camposList);
}
} catch (IOException e) {
System.out.prinln(e);
}
}
}

Escritura

De manera similar, podemos utilizar las clases estándar de Java como BufferedWriter o FileWriter para escribir un archivo en formato CSV.

Asumimos que tenemos una lista de listas de String, donde cada lista interna representa una línea en el archivo CSV.

EscribirCSVManual
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class EscribirCSVManual {
public static void main(String[] args) {
// Crear una lista de listas de String (los datos que queremos escribir en el CSV)
ArrayList<ArrayList<String>> listaDeListas = new ArrayList<>();

// Añadir algunos datos (cada lista interna representa una línea del CSV)
ArrayList<String> linea1 = new ArrayList<>();
linea1.add("Nombre");
linea1.add("Edad");
linea1.add("Ciudad");
listaDeListas.add(linea1);

ArrayList<String> linea2 = new ArrayList<>();
linea2.add("Carlos");
linea2.add("28");
linea2.add("Madrid");
listaDeListas.add(linea2);

ArrayList<String> linea3 = new ArrayList<>();
linea3.add("Ana");
linea3.add("34");
linea3.add("Barcelona");
listaDeListas.add(linea3);

// Definir el nombre del archivo CSV
String nombreArchivo = "ejemplo.csv";

// Escribir los datos en el archivo CSV con try con recursos
try (BufferedWriter writer = new BufferedWriter(new FileWriter(nombreArchivo))) {
// Iterar sobre cada lista interna (línea del CSV)
for (ArrayList<String> linea : listaDeListas) {
// Unir los elementos de la lista con un delimitador (coma)
String lineaCSV = String.join(",", linea); // linea es un ArrayList de String

// Escribir la línea en el archivo
writer.write(lineaCSV);
writer.newLine(); // Añadir un salto de línea
}

System.out.println("Datos escritos en el archivo CSV correctamente.");
} catch (IOException e) {
System.out.prinln(e);
}
}
}