Tarea 14: Escritura de Objetos con ObjectOutputStream

Explicación del Ejercicio

En esta tarea se guardan objetos completos en un fichero, en lugar de datos sueltos. Para ello se crea la clase Alumno y se escriben cinco de sus instancias en alumnos.dat con ObjectOutputStream.

Conceptos y métodos clave:

  • Interfaz Serializable: La clase Alumno debe implementarla para que sus objetos puedan convertirse en una secuencia de bytes. Es una interfaz marcadora: no obliga a implementar ningún método.
  • Escritura de objetos (writeObject()): Guarda el objeto completo con todos sus atributos, sin tener que escribirlos uno a uno.
  • Flujo de objetos (ObjectOutputStream): Envuelve a un FileOutputStream. Al crearse escribe una cabecera al principio del fichero (esto será importante en la Tarea 16).
  • Getters: Los métodos getNombre(), getEdad() y getNota() de Alumno permiten acceder a los atributos privados desde otra clase.

Código Fuente y Salida

Alumno.java
package ClaseFile;

import java.io.Serializable;

/**
 * @author Eva Gallardo Romero
 * @date 29 de sep de 2026
 * Clase Alumno con los datos de un alumno.
 * Implementa Serializable para poder guardar sus objetos en un fichero.
 */
public class Alumno implements Serializable {

    private String nombre;
    private int edad;
    private double nota;

    public Alumno(String nombre, int edad, double nota) {
        this.nombre = nombre;
        this.edad = edad;
        this.nota = nota;
    }

    public String getNombre() {
        return nombre;
    }

    public int getEdad() {
        return edad;
    }

    public double getNota() {
        return nota;
    }
}
Clase13.java
package ClaseFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * @author Eva Gallardo Romero
 * @date 29 de sep de 2026
 * Guardar en el fichero "alumnos.dat" varios objetos de la clase Alumno
 * utilizando ObjectOutputStream. Para ello la clase Alumno tiene que
 * implementar la interfaz Serializable.
 */
public class Clase13 {

    public static void main(String[] args) {

        // objeto File del fichero de objetos
        File fichero = new File("alumnos.dat");

        // arrays con los datos de los alumnos
        String[] nombres = {"Lucía", "Carlos", "Marta", "Javier", "Elena"};
        int[] edades = {20, 22, 21, 23, 20};
        double[] notas = {8.5, 6.0, 9.25, 7.5, 5.75};

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fichero))) {

            for (int i = 0; i < nombres.length; i++) {

                // creo el objeto y lo escribo en el fichero
                Alumno alumno = new Alumno(nombres[i], edades[i], notas[i]);
                oos.writeObject(alumno);

                System.out.println("Guardado el alumno: " + alumno.getNombre());
            }

        } catch (IOException e) {
            System.out.println("Error al escribir los objetos: " + e.getMessage());
        }

        System.out.println("Alumnos guardados en " + fichero.getName());
    }
}

Resultado Mostrado por Terminal

Salida de Consola
Guardado el alumno: Lucía Guardado el alumno: Carlos Guardado el alumno: Marta Guardado el alumno: Javier Guardado el alumno: Elena Alumnos guardados en alumnos.dat