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.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto