Writer y FileWriter

Writer es la clase que se usa para hacer escrituras hacia fuera utilizando caracteres. Lo más interesante es ver sus usos. Por ejemplo, con FileWriter podemos escribir caracteres y cadenas de caracteres en archivos de texto que se puedan leer por personas.

Para escribir texto en archivos de manera sencilla y efectiva, podemos utilizar la clase FileWriter, que es uno de los escritores más básicos y directos que nos ofrece Java. Su función principal es permitirnos escribir en archivos de texto, y su uso es bastante similar al de un FileOutputStream, pero con la ventaja de manejar caracteres en lugar de bytes.

Al crear un FileWriter, podemos especificar el archivo destino, por ejemplo, un archivo llamado hola.txt. Además, el constructor de FileWriter admite varios parámetros, entre ellos uno que nos permite definir la codificación de caracteres, como UTF-8, lo cual es útil si necesitamos controlar cómo se codifican los caracteres en el archivo. Sin embargo, en la mayoría de los casos, podemos quedarnos con la codificación por defecto sin problemas.

Para trabajar con FileWriter de forma más genérica, podemos usar la interfaz Writer, que nos proporciona métodos comunes para escribir caracteres, cadenas o secuencias de caracteres. Esto nos permite escribir código más flexible y reutilizable.

El método principal para escribir es write, que tiene varias sobrecargas. Podemos escribir un solo carácter pasando un entero que representa el código UTF-16 del carácter, un arreglo de caracteres para escribir varios a la vez, o directamente un String. Por ejemplo, si queremos escribir la cadena "hola mundo", simplemente llamamos a write("hola mundo"). Si queremos escribir varias líneas, podemos llamar a write varias veces, añadiendo el carácter de salto de línea cuando sea necesario.

Además de write, existe el método append, que funciona de manera muy similar, pero acepta objetos que implementan la interfaz CharSequence. Esto incluye a los String, pero también a otras clases que representan secuencias de caracteres. La diferencia práctica es que append puede resultar más claro cuando queremos añadir caracteres o secuencias de caracteres de forma incremental, especialmente cuando trabajamos con caracteres individuales.

Por ejemplo, para añadir la letra 'h', podemos usar append('h'), que es más legible que usar write con un entero que representa el carácter. También podemos usar append con cadenas completas, ya que los String implementan CharSequence.

Es importante manejar correctamente el cierre del escritor para asegurarnos de que todos los datos se escriban en el archivo. Para ello, usamos el método close, que libera los recursos asociados y finaliza la escritura. Antes de cerrar, también podemos llamar a flush para forzar que cualquier dato almacenado en buffers intermedios se escriba inmediatamente en el archivo. Esto es útil si queremos asegurarnos de que la información esté guardada sin esperar a cerrar el escritor.

Una práctica recomendada es usar un bloque try-with-resources para manejar automáticamente el cierre del FileWriter. De esta forma, no tenemos que preocuparnos por llamar a close explícitamente, ya que se ejecutará automáticamente al finalizar el bloque.

Aquí tenemos un ejemplo sencillo que ilustra cómo escribir varias cadenas y caracteres en un archivo usando FileWriter y Writer:

import java.io.FileWriter;
import java.io.Writer;
import java.io.IOException;

public class EscrituraArchivo {
    public static void main(String[] args) {
        try (Writer writer = new FileWriter("hola.txt")) {
            writer.write("hola mundo\n");
            writer.write("como estás\n");
            writer.append('h');
            writer.append("ola\n");
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

En este código, creamos un FileWriter para el archivo hola.txt. Escribimos dos líneas con write, luego añadimos un carácter 'h' y una cadena "ola" con append. Finalmente, llamamos a flush para asegurarnos de que todo se escriba, aunque el cierre automático del `try-with-resources también lo garantiza.

Al abrir el archivo resultante, veremos exactamente las cadenas y caracteres que hemos escrito, y gracias a la codificación y al manejo correcto de saltos de línea, el contenido será legible en cualquier editor moderno, sin necesidad de preocuparnos por los caracteres específicos de fin de línea de cada sistema operativo.

Así, con FileWriter y los métodos write, append, flush y close, tenemos una forma sencilla y efectiva de escribir texto en archivos desde Java.

Lista de reproducción
  1. 1
    Introducción al taller
    2 minutos
  2. 2
    Qué es la entrada y salida
    4 minutos
  3. 3
    Streams de entrada y salida en Java
    7 minutos
  4. 4
    FileOutputStream
    9 minutos
  5. 5
    FileInputStream
    13 minutos
  6. 6
    try-with-resources
    2 minutos
  7. 7
    ObjectOutputStream y OutputInputStream
    6 minutos
  8. 8
    Object streams con Strings y Objects
    6 minutos
  9. 9
    Serializando clases
    7 minutos
  10. 10
    Los peligros de Serializable
    4 minutos
  11. 11
    BufferedOutputStream
    6 minutos
  12. 12
    Envolviendo varios OutputStreams
    2 minutos
  13. 13
    BufferedInputStream y rebobinado de streams
    9 minutos
  14. 14
    Readers y Writers en Java
    3 minutos
  15. 15
    Writer y FileWriter
    4 minutos
  16. 16
    Reader, FileReader y BufferedReader
    4 minutos
  17. 17
    InputStreamReader y OutputStreamWriter
    6 minutos
  18. 18
    PrintStream y PrintWriter
    5 minutos