> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/ficheiros/ficheiros-de-texto-lectura-e-escritura/bufferedreader-e-bufferedwriter.md).

# BufferedReader e BufferedWriter

**BufferedReader** e **BufferedWriter** son clases de Java que melloran radicalmente o rendemento da lectura e escritura de texto envolventando a **FileReader** e **FileWriter** cun **buffer** de memoria. Caracterízanse pola súa eficiencia na xestión de operacións de E/S, optimizando o proceso para traballar con ficheiros de calquera tamaño. As súas características serían:

1. **Con buffering e alta eficiencia**: Almacenan datos en memoria temporal (buffer), reducindo drasticamente o número de operacións de entrada/saída directas ao disco, o que as fai ideais para ficheiros grandes.
2. **Funcionalidade avanzada e práctica**: Ofrecen métodos específicos e útiles como `readLine()` para ler liñas completas de texto ou `newLine()` para inserir saltos de liña, simplificando moito o código.
3. **Optimizados e de alto nivel**: A súa principal vantaxe é o alto rendemento e a comodidade que ofrecen, sendo a elección recomendada para case calquera scenario de lectura ou escritura de texto.

## BufferedWriter

A clase `BufferedWriter`<i class="fa-copy">:copy:</i> mellora o rendemento ao escribir grandes volumes de texto. No seu construtor debemos pasarlle un obxecto `PrintWriter`<i class="fa-copy">:copy:</i>.

{% hint style="warning" %}
**Documentación oficial:** [**https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/BufferedWriter.html**](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/BufferedWriter.html)
{% endhint %}

| **Método**                                          | **Descrición**                                   |
| --------------------------------------------------- | ------------------------------------------------ |
| `void write(String s)`<i class="fa-copy">:copy:</i> | Escribe unha cadea de texto no ficheiro.         |
| `void newLine()`<i class="fa-copy">:copy:</i>       | Engade un salto de liña (`\n`).                  |
| `void close()`<i class="fa-copy">:copy:</i>         | Pecha o escritor e libera os recursos asociados. |

**Exemplo:**

```java
package ExemploBufferedWriter;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class ExemploBufferedWriter {
    public static void main(String[] args) {
        String path = "C:\\Users\\...\\Desktop\\exemploBF.txt";
        BufferedWriter escritor = null;
        try {
            escritor = new BufferedWriter(new FileWriter(path));
            escritor.write("Engadindo texto con BufferedWriter.");
            escritor.newLine(); // Engade unha nova liña
            escritor.write("Segunda liña.\n");
            escritor.write("Na terceira non precisamos o salto");
            System.out.println("Texto engadido correctamente.");
            escritor.close();
        } catch (IOException e) {
            System.out.println("Erro ao escribir.");
        }
    }
}
```

**Exemplo con try-with-resources:**

```java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class ExemploBufferedWriter {
    String path = "C:\\Users\\...\\Desktop\\exemploBF.txt";
    public static void main(String[] args) {
        try (BufferedWriter escritor = new BufferedWriter(new FileWriter(path))) {
            escritor.write("Engadindo texto con BufferedWriter.");
            escritor.newLine(); // Engade unha nova liña
            escritor.write("Segunda liña.\n");
            escritor.write("Na terceira non precisamos o salto");
            System.out.println("Texto engadido correctamente.");
        } catch (IOException e) {
            System.out.println("Erro ao escribir.");
        }
    }
}
```

## BufferedReader

Se combinamos `FileReader`<i class="fa-copy">:copy:</i> con `BufferedReader`<i class="fa-copy">:copy:</i> podemos ler ficheiros de texto liña a liña por exemplo. No seu construtor podemos pasarlle un obxecto `FileReader`<i class="fa-copy">:copy:</i>.

{% hint style="warning" %}
Documentación oficial: <https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/BufferedReader.html>
{% endhint %}

| **Método**                                       | **Descrición**                                                                                           |
| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
| `String readLine()`<i class="fa-copy">:copy:</i> | Lee unha liña completa do ficheiro e devolve unha cadea de texto. Se non hai máis datos, devolve `null`. |
| `boolean ready()`<i class="fa-copy">:copy:</i>   | Devolve `true` se hai máis caracteres dispoñibles para ler, `false` en caso contrario.                   |
| `void close()`<i class="fa-copy">:copy:</i>      | Pecha o lector e libera os recursos asociados.                                                           |

**Exemplo:**

```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ExemploBufferedReader {
    public static void main(String[] args) {
        String path = "C:\\Users\\...\\Desktop\\exemploBF.txt";
        try {
            BufferedReader lector = new BufferedReader(new FileReader(path));
            String liña;
            while ((liña = lector.readLine()) != null) {
                System.out.println(liña);
            }
            lector.close();
        } catch (IOException e) {
            System.out.println("Erro ao ler o ficheiro.");
        }
    }
}
```

**Exemplo con try-with-resources:**

```java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class ExemploBufferedReader {
    public static void main(String[] args) {
        String path = "C:\\Users\\...\\Desktop\\exemploBF.txt";
        try (BufferedReader lector = new BufferedReader(new FileReader(path))) {
            String liña;
            while ((liña = lector.readLine()) != null) {
                System.out.println(liña);
            }
        } catch (IOException e) {
            System.out.println("Erro ao ler o ficheiro.");
        }
    }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/ficheiros/ficheiros-de-texto-lectura-e-escritura/bufferedreader-e-bufferedwriter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
