Saltar al contenido

Archivos binarios. Ficheros en Java (II).

Además de poder leer y escribir en ficheros de texto plano en java, también podemos utilizar archivos binarios para realizar estas operaciones.

Para poder escribir en archivos binarios con el lenguaje java haremos uso de las siguientes clases de la API de java.

  • La clase File para hacer crear el archivo.
  • La clase FileOutputStream para escribir en el archivo, junto con la clase ObjectOutputStream.
  • El método WriteObject() de la clase ObjectOutputStream, pasándole como parámetro el objeto que queremos agregar a nuestro archivo.

Además para este ejemplo, usaremos dos clases en nuestro proyecto, una llamada Persona y otra que será la Principal y contendrá el método main.

Creando una clase persona.

En esta clase, tendremos tres atributos (DNI, nombre y edad) además de un método toString que nos mostrará los datos de la persona.

Se debe tener en cuenta que para agregar un objeto a un archivo binario, la clase que contiene las características y propiedades del objeto, debe implementar la interfaz serializable. Vemos en el siguiente ejemplo como quedaría el código de la clase Persona.

package archivos;

// Importamos el paquete java.io
import java.io.*;

public class Persona implements Serializable {
    
    private String dni;
    private String nombre;
    private int edad;

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    @Override
    public String toString() {
        return "DNI: " + dni + ". Nombre=" + nombre + ". Edad=" + edad + '}';
    }
}

Una vez creada la clase persona, agregaremos de forma manual un objeto de tipo persona. Recordamos que en este ejemplo, estamos utilizando en la clase persona el constructor por defecto. Sin embargo, podemos crear un constructor a nuestra medida si lo creemos necesario.

Como escribir en archivos binarios con java.

Vamos a ver un ejemplo de como escribir en un archivo binario, una vez que ya hemos creado la clase anterior.

package archivos;

import java.io.*;

public class Principal {

    public static void main(String[] args) {
        
        // Creamos dos personas para agregar a un archivo con extensión ".dat"
        // es decir, escribiremos los datos en un archivo binario.
        Persona persona = new Persona ();
        
        // Asignamos los valores que queramos a cada persona
        persona.setDni("1234678A");
        persona.setNombre("María");
        persona.setEdad(34);
        
        // Creamos un objeto de tipo fila para asignarle un archivo
        File archivo = new File("escritura.dat");
        
        try {
            // Para poder escribir utilizaremos un FileOutputStream pasandole
            // como referencia el archivo de tipo File.
            FileOutputStream fos = new FileOutputStream(archivo);
            
            // Y crearemos también una instancia del tipo ObjectOutputStream
            // al que le pasaremos por parámetro
            // el objeto de tipo FileOutputStream
            ObjectOutputStream escribir = new ObjectOutputStream(fos);
            
            // Escribimos los objetos en el archivo.
            escribir.writeObject(persona);
            
            // Cerramos los objetos para no consumir recursos.
            escribir.close();
            fos.close();
            
        } catch (Exception e) {
            System.out.println("Error al escribir en el archivo. "
                    + e.getMessage());   
        }
    }
}

Veamos ahora como leer el archivo que hemos creado anteriormente.

Leer archivos binarios con java.

Para poder leer este tipo de archivos haremos uso de las siguientes clases de la API de java.

  • La clase File para hacer crear el archivo.
  • La clase FileInputStream para leer el archivo, junto con la clase ObjectInputStream.
  • El método ReadObject() de la clase ObjectOutputStream.
package archivos;

import java.io.*;

public class Principal {

    public static void main(String[] args) {
        
        // Creamos un objeto de tipo fila para asignarle un archivo
        File archivo = new File("escritura.dat");
        
        try {
            // Para poder leer utilizaremos un FileInputStream pasandole
            // como referencia el archivo de tipo File.
            FileInputStream fis = new FileInputStream(archivo);
            
            // Declaramos una variable objeto del tipo ObjectInputStream
            ObjectInputStream leer;
            
            // Creamos un bucle para leer la información
            // Mientras haya bytes en el archivo.
            while(fis.available()>0){
                leer= new ObjectInputStream(fis);
                
                // En una variable objeto de tipo Persona almacenaremos
                // el objeto leido de tipo Object convertido en un objeto
                // de tipo persona
                Persona personaLeida= (Persona) leer.readObject();
                
                // Imprimimos el objeto leido en consola
                System.out.println(personaLeida);   
            }
            
        } catch (Exception e) {
            System.out.println("Error al leer el archivo. "
                    + e.getMessage());   
        }
    }
}