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):
FileReaderyFileWriter. - Para lectura y escritura en archivos binarios (bytes):
FileInputStreamyFileOutputStream.
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
File(String pathname): Constructor que crea un objetoFileabriendo el archivo especificado en el parámetro.boolean canExecute(): Retornatruesi la aplicación puede ejecutar el archivo denotado en la ruta delFile.boolean canRead(): Retornatruesi la aplicación puede leer el archivo denotado en la ruta delFile.boolean canWrite(): Retornatruesi la aplicación puede escribir en el archivo denotado en la ruta delFile.int compareTo(File pathname): Compara la ruta delFilecon la del parámetro alfabéticamente. Si son iguales, retorna 0.boolean createNewFile(): Crea un archivo vacío si el archivo con el nombre delFileno existe.boolean delete(): Elimina el archivo denotado en la ruta delFile.boolean exists(): Retornatruesi el archivo denotado en la ruta delFileexiste.File getAbsoluteFile(): Retorna la forma absoluta de la ruta del archivo.File getCanonicalFile(): Retorna la forma canónica de la ruta del archivo.String getName(): Retorna el nombre del archivo o directorio representado en elFile.boolean isDirectory(): Retornatruesi la ruta que representa elFilees un directorio.boolean isFile(): Retornatruesi la ruta que representa elFilees un archivo.boolean isHidden(): Retornatruesi el archivo denotado en la ruta delFileestá oculto.long lastModified(): Retorna el tiempo en que el archivo denotado en la ruta delFilefue modificado.long length(): Retorna el tamaño en bytes del archivo denotado en la ruta delFile.boolean mkdir(): Crea un directorio con el nombre y ruta denotados en elFile.boolean setReadOnly(): Establece el archivo denotado en la ruta delFilecomo de solo lectura.boolean setWritable(boolean writable): Establece el archivo denotado en la ruta delFilecomo 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).
