Formación informática

Java | Joomla | MySQL

Curso de Java - Tema 30: lectura y escritura en ficheros en formato binario

Lectura y escritura desde/en ficheros binariosSegún la Wikipedia: “Un archivo binario es un archivo informático que contiene información de cualquier tipo codificada en binario para el propósito de almacenamiento y procesamiento en ordenadores.“ De alguna forma, se puede decir que se encriptan los datos para ocultar la información que contiene el archivo y su estructura.

El proceso es muy similar respecto a la lectura y/o escritura en ficheros de texto pero usando objetos distintos. Aunque esta vez empezaremos a explicar como se escribe información en un archivo binario porque no es habitual tener acceso a archivos binarios cuya estructura conocemos. Así primero crearemos un archivo binario y después leeremos su contenido.

Objetos necesarios

Para leer y/o escribir de/en un fichero tenemos que hacer uso de numerosas clases de Java para crear objetos que nos permitan usar sus métodos. En función del caso particular en el que estemos tendremos que usar todas o parte de las siguientes clases:

  1. Usaremos la clase File para crear un objeto de tipo fichero que nos permite acceder a él. A este objeto tenemos que pasarle la ruta absoluta del fichero. El identificador más adecuado es fichero. En caso de no indicar una ruta, Netbeans asumirá que el archivo está en la carpeta principal del proyecto.
  2. Usaremos la clase FileOutputStream para tener acceso al fichero instanciado con la clase File en el que escribiremos bytes. Aquí podemos indicar que los datos se añadan al archivo usando el constructor adecuado.
  3. Usaremos la clase DataOutputStream para almacenar temporalmente el contenido y escribirlo en el archivo usando el objeto FileOutputStream. El identificador más adecuado es dos.
  4. Usaremos la clase FileInputStream para recuperar los datos del objeto instanciado con la clase File. La lectura devuelve bytes.
  5. Usaremos la clase DataInputStream para devolver el contenido leído con el objeto File. Usaremos el método readLine() para leer cada línea que guardaremos en un objeto de la clase String. El identificador más adecuado es dis.
  6. Usaremos la clase FileNotFoundException para realizar el tratamiento de excepciones relativas a la búsqueda del archivo.
  7. Usaremos la clase IOException para realizar el tratamiento de excepciones en la entrada y salida de datos.
  8. Usaremos la clase EOFException para realizar el tratamiento de excepciones cuando se alcanza el final de un archivo durante su lectura.

Escritura en ficheros binarios

El proceso comienza por instanciar un objeto de la clase File para indicar la ruta del archivo dónde se escribirán los datos. A continuación, creamos un objeto de la clase FileOutputStream para permitir escribir en el fichero instanciado en el paso anterior. Por último, realizamos la escritura mediante un objeto de la clase DataOutputStream al que le pasamos los datos, bien mediante la introducción directa u objetos que los contengan. 

Un ejemplo de uso sería el siguiente código mediante el cual se escribe el número 23 en un fichero en formato binario.

/*
 * Aplicación para escribir en un fichero en formato binario.
 */
package principal;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {

    
    public static void main(String[] args) {             
        
        try {
            File fichero = new File("binario.bin");
            FileOutputStream fos = new FileOutputStream (fichero);
            DataOutputStream dos = new DataOutputStream (fos);
            
            dos.writeInt(23);
            
            dos.close();
        } catch (FileNotFoundException ex) {
            System.out.println(ex.getMessage());
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }        
    }    
}

Lectura desde ficheros binarios

Para poder recuperar los datos es necesario conocer la estructura del archivo y el tipo de datos que contiene. De esta forma, conocemos el orden de los campos. En caso contrario hay que realizarla byte a byte, siendo un proceso más lento.

El proceso comienza instanciando un objeto File que nos permite acceder al fichero. A  continuación tenemos que usar un objeto FileInputStream que nos permite recuperar los datos. El siguiente paso es leer el contenido del archivo usando un objeto DataInputStream que combinado con un bucle while nos permitirá mostrar el contenido. Por último, tenemos que cerrar los objetos usados para liberar los recursos usados en el proceso.

Un ejemplo sería el siguiente código mediante el cual se recupera el contenido almacenado en el punto anterior:

/**
 * Aplicación que nos permite leer el contenido de un fichero en formato binario
 */
package principal;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author José María Torres Corral
 */
public class Main {

    public static void main(String[] args) {
        //Objeto para acceder al fichero
        File fichero;
        //Objeto para recuperar los datos
        FileInputStream fis;
        //Objeto para leer los datos
        DataInputStream dis;
        //Variable para almacenar el número
        int n;
        try {
            fichero = new File("F:\\CARPETAS PERSONALES\\JMRI\\APRENDIZAJE\\CERTICADOS DE APTITUD
PROFESIONAL\\IFCT0111-LENGUAJES DE PROGRAMACIÓN\\NETBEANS\\EJERCICIOS JAVA NIVEL MEDIO\\0076-
FicherosBinariosEscritura\\binario.bin");
            fis = new FileInputStream(fichero);
            dis = new DataInputStream(fis);

            while (true) {
                n = dis.readInt();
                System.out.println(n);                
            }
				fis.close();
        	dis.close();

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (EOFException e) {
            System.out.println("Fin de fichero");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}
Curso de Java - Tema 29: lectura y escritura en ficheros de texto | Curso de Java - Tema 31 - Bases de datos
Curso de Java - Índice Ejercicios Nivel Medio

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información