java

Java: convertir CSV (archivo de texto) a ArrayList

En el post te hoy te enseñaré a crear un ArrayList a partir de un archivo de texto plano en formato separado por comas usando Java.

Es decir, vamos a leer el archivo línea por línea, crear un objeto y luego agregar ese objeto al ArrayList. Básicamente vamos a convertir un txt o archivo separado por comas a un ArrayList.

Para este caso usaré la clase Persona que tiene los atributos nombre, edad y dirección.

El archivo es el siguiente:

Luis;40;Su casa
Link;20;Hyrule
Hollow Knight;5;Hallownest

Puedes tomarlo como convertir un CSV a ArrayList o un TXT a ArrayList.

Explicación del algoritmo

Convertir un CSV a ArrayList en Java es muy sencillo. Primero abrimos y recorremos el archivo línea por línea.

Después usamos split para convertir esa línea a arreglo, separándola por el punto y coma.

Para el ejemplo del archivo que coloqué al inicio, en la posición 0 del arreglo estaría el nombre, en la 1 la edad y en la 2 la dirección.

Ahora que tenemos un arreglo con los datos que necesitamos hacemos las conversiones de String a Int necesarias, creamos un objeto y luego lo agregamos al ArrayList.

CSV (archivo de texto) a ArrayList en Java

Java – Convertir CSV (archivo de texto plano) a ArrayList

Primero veamos la clase. Recuerda que se supone que dentro del CSV hay un objeto por línea (serializado) y que vamos a crear varios objetos de este tipo:

class Persona {
 private String nombre, direccion;
 private int edad;

 public Persona(String nombre, int edad, String direccion) {
  this.nombre = nombre;
  this.edad = edad;
  this.direccion = direccion;
 }

 @Override
 public String toString() {
  return "Nombre: " + this.nombre + " edad: " + this.edad + ", direccion: " + this.direccion;
 }

 public String getNombre() {
  return this.nombre;
 }

 public String getDireccion() {
  return this.direccion;
 }

 public int getEdad() {
  return this.edad;
 }

}

Por el momento no coloqué setters ni más constructores, pues basta con lo que se ve en la clase para el ejercicio que vamos a resolver.

Creamos el ArrayList de tipo Persona que al inicio estará vacío y también abrimos el archivo manejando las excepciones:

final String NOMBRE_ARCHIVO = "personas.txt";
final String SEPARADOR_CAMPO = ";";
ArrayList<Persona> personas = new ArrayList<>();
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
  fileReader = new FileReader(NOMBRE_ARCHIVO);
  bufferedReader = new BufferedReader(fileReader);
  String linea;
}

Ahora hacemos un ciclo while leyendo el archivo línea por línea, y justo ahí ocurre la magia en donde agregamos el objeto al ArrayList con add:

while ((linea = bufferedReader.readLine()) != null) {
  String[] personaComoArreglo = linea.split(SEPARADOR_CAMPO);
  personas.add(new Persona(personaComoArreglo[0], Integer.valueOf(personaComoArreglo[1]),
      personaComoArreglo[2]));
}

La conversión también ocurre en la línea 3 en donde usamos Integer.valueOf. Finalmente regresamos ese ArrayList y así es como hemos transformado un txt a un ArrayList en Java.

Poniendo todo junto

El código completo junto con su uso queda como se ve a continuación. Recuerda que el orden del archivo TXT o CSV es importante y que el mismo debe existir:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

class Persona {
 private String nombre, direccion;
 private int edad;

 public Persona(String nombre, int edad, String direccion) {
  this.nombre = nombre;
  this.edad = edad;
  this.direccion = direccion;
 }

 @Override
 public String toString() {
  return "Nombre: " + this.nombre + " edad: " + this.edad + ", direccion: " + this.direccion;
 }

 public String getNombre() {
  return this.nombre;
 }

 public String getDireccion() {
  return this.direccion;
 }

 public int getEdad() {
  return this.edad;
 }

}

class Main {

 public static ArrayList<Persona> obtener() {
  final String NOMBRE_ARCHIVO = "personas.txt";
  final String SEPARADOR_CAMPO = ";";
  ArrayList<Persona> personas = new ArrayList<>();
  FileReader fileReader = null;
  BufferedReader bufferedReader = null;
  try {
   fileReader = new FileReader(NOMBRE_ARCHIVO);
   bufferedReader = new BufferedReader(fileReader);
   String linea;
   while ((linea = bufferedReader.readLine()) != null) {
    String[] personaComoArreglo = linea.split(SEPARADOR_CAMPO);
    personas.add(new Persona(personaComoArreglo[0], Integer.valueOf(personaComoArreglo[1]),
      personaComoArreglo[2]));
   }
  } catch (IOException e) {
   System.out.println("Excepción leyendo archivo: " + e.getMessage());
  } finally {
   try {
    if (fileReader != null) {
     fileReader.close();
    }
    if (bufferedReader != null) {
     bufferedReader.close();
    }
   } catch (IOException e) {
    System.out.println("Excepción cerrando: " + e.getMessage());
   }
   return personas;
  }
 }

 public static void main(String[] args) {
  ArrayList<Persona> personas = obtener();
  // Podemos imprimirlas...
  System.out.println(personas);
  // O recorrerlas
  for (int x = 0; x < personas.size(); x++) {
   Persona persona = personas.get(x);
   System.out.println("Tenemos una persona con nombre " + persona.getNombre() + " edad " + persona.getEdad()
     + " y direccion " + persona.getDireccion());
  }

 }
}

En el main simplemente estoy obteniendo el ArrayList desde el archivo de texto plano y también recorriéndolo.

La salida ya la dejé en una imagen anteriormente. Es importante aclarar que esto es un ejemplo de una clase con 3 atributos pero que puedes ajustar para manejar más atributos o una clase distinta.

Para terminar te dejo con más tutoriales de Java en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.