Entrada / Salida de ficheros – Flujo de datos

Posted by in Almacenamiento, Fundamentos, Java

Si se quiere escribir o leer en un fichero o directorio, java tiene la posibilidad de diferenciar entre tratamiento de flujo de carácteres y flujo de binarios mediante las clases InputStream / OutputStrea y Reader /Writer respectivamente. Su uso es similar y se diferencua el la escritura o lectura del archivo correspondiente.

Lo primero que hya que tener claro es el uno de los objetos de tipo File, ya que es la base de toda entrada salida de datos. Esta clase File hace referencia a una dirección expresada en String donde se apunta al fichero – directorio con el que se quiere trabajar

Este tipo de objetos permiten la ejecucion de diferentes métodos, como son:

Flujo de carácteres

La primera posibilidad para trabajar con entradas y salidas en un fichero de tipo File son las clases FileReader y FileWriter. Dichas clases permiten el flujo de carácteres, leyendo y escribiendo en fichero indicado. Adicionalmente se utilizan las clases BufferedReader y BuffereWriter para crear un buffer de lectura / escritura para tratar la información de forma más segura. Para poder utilizar un objeto de este tipo se debe pasar como parámetro un objeto del tipo correspondiente

Dentro de los métodos más utilizados para las clases de lectura y escritura encontramos los siguientes:

Flujos de datos binarios

En el caso de querer escribir un archivo con algo más de complejidad que simples datos primitivos, se necesitan utilizar las clases derivadas de InputStream / OutputStream. Las principales son: FileInputStream (in/out), DataInputStream (in/out) y ObjectInputStream (in/out)

FileStream

Utilizados para escribir y/o leer ficheros con códigos binarios. En realidad este tipo de ficheros es la base de muchos de los flujos de datos.

Para la lectura se utiliza el objeto de tipo FileInputStream y el método read

Hay que tener en cuenta que este método me devuelve el valor numérico correspondiente, el cual hay que pasar a byte y a String consecutivamente para poder leer el contenido de forma comprensible

Para la escritura se utiliza el objeto de tipo FileOutputStream y el método write. Para poder utilizar este método hay que pasarle una cadena de bytes, por lo que habrá que convertir el objeto a guardar en bytes

DataStream

Utilizados para escribir y/o leer ficheros donde cada lectura se asocia a un tipo concreto. La traducción se realiza de bytes al tipo indicado

Para la lectura se utiliza DataInputStream junto con el metro readXXX() indicando el tipo concreto

Para la escritura se utiliza DataOutputStream junto con el metro writeXXX() indicando el tipo concreto

ObjectStream

Utilizados para escribir y/o leer ficheros donde se guardan objectos complejos. Hay que tener en cuenta que para poder guardar / leer un objeto este debe ser serializado (implementar la interfaz serializable) de forma que sea procesado por partes.

Para la lectura se utiliza un objeto de tipo ObjectInputStream con el método readXXX y el tipo concreto. En este caso existe la posibilidad de ejecutar el método readObject()

Para la escritura se utiliza un objeto de tipo ObjectOutStream con el método writeXXX y el tipo concreto. En este caso existe la posibilidad de ejecutar el método writeObject(), teniendo en cuenta que el objeto que se quiera escribir haya implementado la interfaz serializable

El código completo del ejemplo es: