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

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.