En este artículo te muestro, paso a paso, cómo modelar una Persona con nombre, apellido y DNI (con validación española), cómo almacenar varias personas en un ArrayList, serializar esa lista y guardarla en un archivo binario. Además, veremos cómo leer el archivo para recuperar los objetos.
Requisitos
- JDK 17 o superior (vale desde 8, pero recomiendo 17+).
- Cualquier IDE (IntelliJ / Eclipse / NetBeans) o la terminal.
- Conocimientos básicos de Java y colecciones.
¿Qué es “serializar” en Java?
Serializar es convertir un objeto a una secuencia de bytes para poder guardarlo (por ejemplo, en un archivo) o enviarlo por red. En Java se hace implementando la interfaz Serializable y usando ObjectOutputStream / ObjectInputStream.
Estructura del proyecto
src/
├─ Persona.java
└─ Main.java
Clase Persona (con validación de DNI)
- Campos:
nombre,apellido,dni. - Implementa
Serializable. - Valida el DNI español (8 dígitos + letra correcta).
Nota: El algoritmo de la letra del DNI usa la cadena
"TRWAGMYFPDXBNJZSQVHLCKE".
Letra =letras[numero % 23].
// Persona.java
import java.io.Serializable;
public class Persona implements Serializable {
private static final long serialVersionUID = 1L;
private final String nombre;
private final String apellido;
private final String dni; // Formato: 8 dígitos + letra correcta (ej: 12345678Z)
public Persona(String nombre, String apellido, String dni) {
if (nombre == null || nombre.isBlank()) {
throw new IllegalArgumentException("El nombre no puede estar vacío.");
}
if (apellido == null || apellido.isBlank()) {
throw new IllegalArgumentException("El apellido no puede estar vacío.");
}
String normalizado = (dni == null) ? "" : dni.trim().toUpperCase();
if (!isDniValido(normalizado)) {
throw new IllegalArgumentException("DNI inválido: " + dni);
}
this.nombre = nombre.trim();
this.apellido = apellido.trim();
this.dni = normalizado;
}
public String getNombre() { return nombre; }
public String getApellido() { return apellido; }
public String getDni() { return dni; }
@Override
public String toString() {
return nombre + " " + apellido + " (" + dni + ")";
}
// ====== Validación DNI ======
public static boolean isDniValido(String dni) {
if (dni == null) return false;
dni = dni.trim().toUpperCase();
if (!dni.matches("\\d{8}[A-Z]")) return false;
String letras = "TRWAGMYFPDXBNJZSQVHLCKE";
int numero = Integer.parseInt(dni.substring(0, 8));
char letraEsperada = letras.charAt(numero % 23);
return dni.charAt(8) == letraEsperada;
}
}
Programa principal: crear ArrayList<Persona>, serializar y deserializar
- Creamos algunas personas de ejemplo.
- Guardamos el
ArrayListenpersonas.bin. - Leemos el archivo y listamos por consola.

Ejecución desde la terminal
Dentro del directorio src (o ajusta rutas según tu IDE):
javac Persona.java Main.java
java Main
Verás algo como:
✅ Guardadas 3 personas en: personas.bin
Personas leídas desde el archivo:
- Ana López (12345678Z)
- Carlos Pérez (11111111H)
- Lucía Martín (87654321X)
Se crea el archivo personas.bin en el directorio actual.
Añadiendo personas por consola (opcional)
Si prefieres pedir datos al usuario, puedes usar Scanner y luego llamar a guardarPersonas(...).
Consejo: siempre valida el DNI antes de crear la Persona.
// Fragmento opcional para leer por consola
/*
Scanner sc = new Scanner(System.in);
System.out.print("Nombre: ");
String nombre = sc.nextLine();
System.out.print("Apellido: ");
String apellido = sc.nextLine();
System.out.print("DNI (8 dígitos + letra): ");
String dni = sc.nextLine();
if (!Persona.isDniValido(dni)) {
System.out.println("DNI inválido.");
} else {
personas.add(new Persona(nombre, apellido, dni));
guardarPersonas(personas, RUTA_ARCHIVO);
}
*/
Errores comunes y cómo resolverlos
java.io.NotSerializableException
Alguna clase en tu grafo de objetos no implementaSerializable. Asegúrate de que Persona (y cualquier otra clase interna) lo implemente.InvalidClassExceptiontras cambios en la clase
Cambiar la estructura de la clase después de haber serializado puede romper la lectura. Define unserialVersionUIDfijo para mayor control.ClassCastExceptional leer
Verifica que el archivo contiene exactamente unaList<Persona>(y no otra cosa).
Copiar/pegar en WordPress
- En el editor de bloques (Gutenberg), inserta un bloque Código y pega los fragmentos con el idioma Java para resaltar sintaxis.
- Estructura el post con
H2/H3, tal como en este artículo, para buen SEO y legibilidad.
Resumen
- Modelamos
Personacon validación de DNI. - Usamos
ArrayList<Persona>para almacenar varias personas. - Serializamos con
ObjectOutputStreamapersonas.bin. - Deserializamos con
ObjectInputStreampara recuperar la lista.
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)
- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)
- 60 ejercicios de funciones recursivas en Python para la carrera de Informática
- SIMULACRO 2 – FP Programación de Videojuegos
- Simulacro de examen – FP Programación de Videojuegos
- ALERTA METEOROLÓGICA

- Proyectos que puedes empezar para aprender a programar (Academia San Roque)

- 15 ejercicios básicos en R (con soluciones)

- 📘 5 Ejercicios Sencillos de Programación en R (con soluciones)

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed