Una de las tareas más comunes en el desarrollo de software es la capacidad de leer y escribir archivos. Las entradas y las salidas de datos en Java se manejan mediante streams (flujos de datos). Un stream es una conexión entre el programa y la fuente (lectura) o el destino (escritura) de los datos. En Java, escribir en un archivo es un proceso sencillo que se puede realizar utilizando clases y métodos integrados. Un archivo debe tener un nombre único dentro de la carpeta que lo contiene.
Es una buena práctica de programación cerrar el flujo de datos al final de la ejecución del programa para garantizar que el archivo se guarde correctamente y los recursos se liberen adecuadamente.
La Clase File: Piedra Angular para Operaciones con Ficheros
En esta entrada vamos a profundizar sobre la clase «File» de Java. Se trata de la piedra angular de Java para trabajar con Ficheros. Esta clase permite realizar diversas operaciones esenciales en el manejo de archivos.
Operaciones Comunes con la Clase File
- Crear un fichero.
- Comprobar si existe un determinado fichero.
- Comprobar si un item es un archivo o un directorio.
- Comprobar los permisos de un fichero.
- Borrar un fichero.
- Obtener la ruta completa de un fichero.
- Obtener el nombre de un fichero.
- Obtener la ruta del directorio que contiene un fichero.
Creación de un Fichero
Para crear un fichero basta con crear una instancia de la clase «File» con una ruta determinada y luego ejecutar el método «createNewFile». Lo primero que hacemos es instanciar nuestra clase File y en el parámetro del constructor le pasamos la ruta del fichero que queremos crear, en este caso, se creará en la ruta actual de nuestro proyecto de eclipse.
Verificación de Tipo y Existencia
Para comprobar si un item es un fichero o un directorio tenemos los métodos «isFile» e «isDirectory» que nos devuelven true en caso de que sea un fichero o un directorio respectivamente. Comprobar si existe un determinado fichero es otra funcionalidad clave de la clase File.
Lea también: IVA 21% Excel
Listado de Ficheros y Directorios
Para listar todos los ficheros y directorios de un determinado directorio tenemos que utilizar el método «listFiles», este método devuelve un Array de objetos de tipo File, y podemos recorrer dicho Array con un sencillo bucle «for».
Escribir en un Archivo Usando Java
En este artículo, exploraremos cómo escribir en un archivo usando Java y discutiremos las diversas clases y métodos involucrados. Java proporciona clases integradas como FileWriter y PrintWriter para escribir en un archivo en Java.
Clase FileWriter
La clase FileWriter es otra forma de escribir en un archivo en Java. Es una clase de flujo de caracteres que le permite escribir datos de caracteres en un archivo. Aquí hay un ejemplo de cómo escribir una cadena en un archivo en Java usando la clase FileWriter :
En este ejemplo, primero creamos un objeto String llamado datos que contiene el texto que queremos escribir en un archivo. Luego creamos un objeto FileWriter con el nombre del archivo en el que queremos escribir, en este caso llamado salida.txt. A continuación, utilizamos el método write() del objeto FileWriter para escribir la cadena de datos en el archivo. Este método toma un argumento String que contiene los datos a escribir. Finalmente, cerramos el objeto FileWriter para liberar los recursos del archivo e imprimimos un mensaje de éxito en la consola si la operación de escritura fue exitosa o un mensaje de error si se detecta una excepción. La clase FileWriter es una forma sencilla de escribir datos de caracteres en un archivo en Java.
Clase FileOutputStream
La clase FileOutputStream se utiliza para escribir datos en un archivo como una secuencia de bytes. Esta clase hereda de la clase OutputStream y permite crear y escribir un flujo de bytes en un archivo de texto plano. El método write es un método sobrecargado. En este ejemplo, creamos un objeto FileOutputStream llamado stream con el nombre de archivo "output.txt" para escribir. Luego convertimos la cadena textToWrite en una matriz de bytes usando el método getBytes() y escribimos la matriz de bytes en el objeto de flujo usando el método write(). Finalmente, cerramos el objeto de flujo.
Lea también: Guía IVA reducido
Clase BufferedWriter
La clase BufferedWriter se utiliza para escribir texto en un archivo con capacidades de almacenamiento en búfer. En este ejemplo, creamos un objeto BufferedWriter llamado escritor con un objeto FileWriter que escribe en el archivo "output.txt". Luego usamos el método write() del objeto escritor para escribir textToWrite en el archivo. Finalmente, cerramos el objeto escritor.
Clase PrintWriter
La clase PrintWriter, que también deriva de Writer, permite escribir de forma sencilla en un archivo de texto plano. La clase PrintWriter vacía automáticamente el búfer de salida después de escribir cada línea, lo que garantiza que los datos se escriban inmediatamente en el archivo. Esto lo convierte en una opción conveniente para escribir grandes cantidades de datos de texto en un archivo. En este ejemplo, creamos un objeto PrintWriter llamado escritor con un objeto FileWriter que escribe en el archivo "output.txt". Luego usamos el método println() del objeto escritor para escribir textToWrite en el archivo. Finalmente, cerramos el objeto escritor.
Clase DataOutputStream
La clase DataOutputStream se utiliza para escribir tipos de datos Java primitivos en un archivo como una secuencia de bytes. En este ejemplo, creamos un objeto DataOutputStream llamado stream, que escribe en el archivo "output.txt". Luego usamos el método writeUTF() del objeto stream para escribir la cadena textToWrite y el método writeInt() para escribir el entero numberToWrite en el archivo. Finalmente, cerramos el objeto de flujo.
Clase FileChannel
La clase FileChannel proporciona una forma de escribir datos en un archivo mediante E/S asignadas en memoria. En este ejemplo, primero creamos un objeto File llamado archivo con el nombre de archivo "output.txt" como parámetro. Luego creamos un objeto RandomAccessFile llamado randomAccessFile con el objeto de archivo y el modo "rw" como parámetros. Luego creamos un objeto FileChannel llamado canal, que se inicializa usando el objeto randomAccessFile. Luego creamos un objeto ByteBuffer llamado buffer con una capacidad de 1024 bytes y colocamos la cadena textToWrite como parámetro. Luego volteamos el objeto del búfer para prepararlo para la escritura y lo escribimos en el objeto del canal usando el método write(). Finalmente, cerramos el objeto randomAccessFile.
Método Files.writeString() (Java 11+)
El método writeString() es un método conveniente introducido en Java 11 para escribir una cadena en un archivo usando la clase Files. Le permite escribir una cadena en un archivo en una sola línea de código. En este ejemplo, primero creamos un objeto String llamado datos que contiene el texto que queremos escribir en un archivo. Luego creamos un objeto Path llamado archivo que representa el archivo en el que queremos escribir, en este caso llamado "output.txt". A continuación, utilizamos el método Files.writeString() para escribir la cadena de datos en el archivo representado por el objeto de archivo. Este método toma dos argumentos: el objeto Path que representa el archivo para escribir y el objeto String que contiene los datos para escribir. Finalmente, imprimimos un mensaje de éxito en la consola si la operación de escritura fue exitosa o un mensaje de error si se detecta una excepción. El método writeString() es una forma conveniente de escribir una cadena en un archivo usando Java 11 o posterior.
Lea también: ¿Cómo localizar tus XML del SAT?
Lectura de Archivos en Java
La lectura de archivos es tan importante como la escritura. FileInputStream permite leer flujos de bytes desde un archivo de texto plano. Hereda de la clase InputStream. También se crea un buffer de 81 bytes. El objeto FileInputStream lee el texto desde el archivo y lo almacena en el buffer creado. Se lee el archivo hasta que se terminen los caracteres de éste o hasta que se llene el buffer (desde la posición 0 hasta la 81), lo que ocurra primero. Las clases Reader se utilizan para obtener los caracteres ingresados desde una fuente.
Tabla Comparativa de Clases de Escritura en Archivos
La siguiente tabla resume las principales características de las clases y métodos para escribir en archivos en Java:
| Clase / Método | Tipo de Datos | Característica Principal |
|---|---|---|
| FileWriter | Caracteres | Escribe datos de caracteres en un archivo. |
| FileOutputStream | Bytes | Escribe una secuencia de bytes en un archivo. |
| BufferedWriter | Caracteres | Escribe texto con capacidades de almacenamiento en búfer. |
| PrintWriter | Caracteres | Escribe texto, vacía automáticamente el búfer. |
| DataOutputStream | Tipos Primitivos Java | Escribe tipos de datos primitivos Java como secuencia de bytes. |
| FileChannel | Bytes | Escribe datos mediante E/S asignadas en memoria. |
| Files.writeString() | Cadena de texto | Escribe una cadena en una sola línea (Java 11+). |
