Implementación de Flujos y Gestión de Archivos en Java I/O


Escritura y Lectura de Archivos (Flujos de Datos)

La escritura y lectura de archivos en Java se pueden realizar con un manejo muy similar al de las salidas y entradas estándar. Java provee clases específicas para gestionar estas operaciones:

  • Para representar un archivo o directorio: La clase File.
  • Para lectura y escritura en archivos de texto (caracteres): FileReader y FileWriter.
  • Para lectura y escritura en archivos binarios (bytes): FileInputStream y FileOutputStream.

La Clase File

La clase File permite representar un archivo o directorio dentro del sistema de archivos. Esta clase provee información acerca del archivo o directorio en disco (metadatos).

Es importante notar que la clase File no abre archivos ni proporciona servicios para procesar su contenido. Su función es la gestión de la ruta y las propiedades del recurso.

Al crear un objeto de la clase File, es necesario indicar el nombre del archivo o su ruta. Si solo se proporciona el nombre, Java intentará encontrar el archivo en el directorio donde se ejecuta la aplicación. La clase File pertenece al paquete java.io.

Métodos Principales de la Clase File

  1. File(String pathname): Constructor que crea un objeto File abriendo el archivo especificado en el parámetro.
  2. boolean canExecute(): Retorna true si la aplicación puede ejecutar el archivo denotado en la ruta del File.
  3. boolean canRead(): Retorna true si la aplicación puede leer el archivo denotado en la ruta del File.
  4. boolean canWrite(): Retorna true si la aplicación puede escribir en el archivo denotado en la ruta del File.
  5. int compareTo(File pathname): Compara la ruta del File con la del parámetro alfabéticamente. Si son iguales, retorna 0.
  6. boolean createNewFile(): Crea un archivo vacío si el archivo con el nombre del File no existe.
  7. boolean delete(): Elimina el archivo denotado en la ruta del File.
  8. boolean exists(): Retorna true si el archivo denotado en la ruta del File existe.
  9. File getAbsoluteFile(): Retorna la forma absoluta de la ruta del archivo.
  10. File getCanonicalFile(): Retorna la forma canónica de la ruta del archivo.
  11. String getName(): Retorna el nombre del archivo o directorio representado en el File.
  12. boolean isDirectory(): Retorna true si la ruta que representa el File es un directorio.
  13. boolean isFile(): Retorna true si la ruta que representa el File es un archivo.
  14. boolean isHidden(): Retorna true si el archivo denotado en la ruta del File está oculto.
  15. long lastModified(): Retorna el tiempo en que el archivo denotado en la ruta del File fue modificado.
  16. long length(): Retorna el tamaño en bytes del archivo denotado en la ruta del File.
  17. boolean mkdir(): Crea un directorio con el nombre y ruta denotados en el File.
  18. boolean setReadOnly(): Establece el archivo denotado en la ruta del File como de solo lectura.
  19. boolean setWritable(boolean writable): Establece el archivo denotado en la ruta del File como escribible.

Escritura y Lectura de Archivos Binarios (Flujos de Bytes)

Conceptos de Archivos Binarios

Un archivo binario o de datos está formado por secuencias de bytes. Estos archivos pueden contener datos de tipo básico (int, float, char, etc.) y objetos. Para poder leer el contenido de un archivo binario debemos conocer la estructura interna del fichero, es decir, debemos saber cómo se han escrito: si hay enteros, long, etc., y en qué orden están escritos en el archivo. Si no se conoce su estructura, solo podemos leerlo byte a byte.

Escribir Datos en Ficheros Binarios

Para escribir datos en un fichero binario utilizaremos las clases Java FileOutputStream y DataOutputStream, derivadas de OutputStream.

1. Clase FileOutputStream

La clase FileOutputStream permite tener acceso al fichero para escribir bytes. Para crear objetos FileOutputStream podemos utilizar los siguientes constructores:

  • FileOutputStream(String ruta)
  • FileOutputStream(File objetoFile)
  • FileOutputStream(String ruta, boolean append)
  • FileOutputStream(File objetoFile, boolean append)

Si el parámetro append es true, significa que los datos se van a añadir a los existentes. Si es false, los datos existentes se pierden. Si se utiliza uno de los dos primeros constructores (sin append), los datos existentes se pierden por defecto.

Los constructores lanzan una excepción FileNotFoundException si el fichero no existe y no se ha podido crear. La clase FileOutputStream proporciona el método write() para escribir bytes en el fichero. Este método lanza una IOException.

2. Clase DataOutputStream

A partir de un objeto FileOutputStream se puede crear un objeto DataOutputStream, que proporciona métodos para escribir datos de tipo primitivo en el archivo.

Para crear un objeto DataOutputStream se utiliza el constructor:

DataOutputStream(OutputStream nombre);

La clase proporciona métodos writeXxx() donde Xxx es el nombre del tipo primitivo (ej. writeInt(), writeFloat()). Estos métodos lanzan una IOException.

Lectura de Ficheros Binarios

Para leer de un fichero binario utilizaremos las clases Java FileInputStream y DataInputStream, derivadas de InputStream.

1. Clase FileInputStream

La clase FileInputStream permite leer bytes de un fichero. Para crear objetos FileInputStream podemos utilizar los constructores:

  • FileInputStream(String ruta)
  • FileInputStream(File objetoFile)

Ambos lanzan una excepción FileNotFoundException si el fichero no existe. La clase proporciona el método read() para leer bytes del fichero. El método read lanza una excepción IOException.

2. Clase DataInputStream

A partir de un objeto FileInputStream podemos crear un objeto DataInputStream para leer datos de tipo primitivo.

Para crear un objeto DataInputStream se utiliza el constructor:

DataInputStream(InputStream nombre);

La clase proporciona métodos readXxx() donde Xxx es el nombre del tipo primitivo (ej. readInt(), readFloat()). Estos métodos lanzan una excepción IOException.

Cuando un método readXxx() alcanza el final del fichero, lanza una excepción EOFException (End Of File Exception).

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *