martes, 26 de febrero de 2013

Leer y Escribir datos primitivos en un Fichero.

Buenas amigos, en el tema anterior estuvimos viendo como leer y escribir en ficheros de texto. En este nuevo tema vamos a ver como leer y escribir datos primitivos (bit, int, short, double...). No difiere mucho a como lo estuvimos haciendo, la metodología a seguir es muy parecida a la lectura y escritura de texto pero con diferentes clases. Veamoslo.



Bien, como ya dijimos más arriba único o casi único que difieren son las clases:

    • FileWrite es cambiado por FileOutputStream.
    • FileReader es cambiado por FileInputStream.
    • BufferedWrite es cambiado por DataOutputStream
    • BufferedReader es cambiado por DataInputStream.
La clase File la seguiremos conservando para crear o cargar nuestros archivos FileOutputStream y FileInputStream serán los que nos permitan de leer y escribir información en el disco, y DataOutputStream y DataInputStream serán los encargados de realizar la lectura y la escritura de esa información.

Las clases DataOutputStream y DataInputStream poseen métodos capaces de leer todo tipo de datos primitivos. Por ejemplo:
    • readXXX(): Método perteneciente a la clase DataInputStream que nos permite leer un fichero donde XXX es el tipo de dato a leer.
      • readInt
      • readDouble
      • ...
    • writeXXX(xxx tipo): Método perteneciente a la clase DataOutputStream que nos permite escribir en un fichero un tipo de dato primitivo, donde XXX es el tipo de dato a ingresar.
      • writeInt(int i)
      • writeDouble(double d);
      • ...
Nosotros vamos a ver un ejemplo muy sencillo con datos de tipo int.

Escritura:

Bueno, los pasos a seguir en la escritura de estos ficheros es la siguiente:
  1. Crear o cargar un fichero con la clase File.
  2. Pasamos el fichero a la clase FileOutputStream
  3. Pasamos este a su vez a DataOutputStream
  4. Creo un array de enteros para almacenar en el archivo.
  5. Escribo el array de enteros en el fichero por medio del método writeInt(int i).
  6. Cierro DataOutputStream.


Podéis observar que es mas o menos lo mismo que un fichero de texto. DataOutputStream lanza IOException que como veis la tengo capturada con el método. FileOutputStream también lanza una excepción FileNotFoundException pero como ya capturo IOException, no tengo por que capturarla.

Lectura:

Los pasos a seguir son los siguientes:

  1. Cargamos el fichero por medio de la clase File.
  2. Se lo pasamos a FileInputStream.
  3. Este es pasado a DataInputStream.
  4. Creamos un bucle infinito que lea todo el archivo hasta que salte IOException, la cual capturaremos dentro del un bloque try,catch,finally
  5. Cerramos DataInputStream.
Bueno, lo más complejo que veo yo es el bucle infinito, lo he creado mediante un for(;;), esto escrito así es un bucle infinito, podríamos utilizar también un while(true), o cualquier otro que se os ocurra. Como ya sabéis, o deberías saber, que no le pongo llaves "{}" al bucle for por el simple hecho de que solo tengo una linea de código y he decidido ahorrar espacio. Acostumbraos a estos pequeños detalles. También podéis ver que he capturado IOException en un bloque catch para mostrar el final de la lectura de datos y en el bloque finally cierro DataInputStream, ya que este se ejecuta siempre, haya o no haya excepción.

Esto hasta aquí no tiene mucho más, ahora ya os toca a vosotros sacarle utilidad. En el próximo tema veremos como escribir objetos en un fichero.

Un saludo.

No hay comentarios:

Publicar un comentario