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 claseAlumnodebe 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 unFileOutputStream. Al crearse escribe una cabecera al principio del fichero (esto será importante en la Tarea 16). -
Getters: Los métodos
getNombre(),getEdad()ygetNota()deAlumnopermiten 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