> 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/scanner-e-printwriter.md).

# Scanner e Printwriter

**Scanner** e **PrintWriter** son clases de Java deseñadas para unha manipulación de datos **de alto nivel**, centrándose na **comodidade** e **flexibilidade** á hora de traballar con fluxos de entrada e saída de texto. Caracterízanse polas súas potentes capacidades de **análise (parsing)** e **formateo** de datos, ofrecendo unha abstracción máis intelixente e fácil de usar que as alternativas máis básicas. As súas características serían:

1. **Análise intelixente e formateo flexible**: **Scanner** especialízase en **parsear** e interpretar datos primitivos (como int, double) e Strings desde a entrada, mentres que **PrintWriter** ofrece métodos como `printf()` para unha **escritura formateada** avanzada, similar á función printf de C.
2. **Funcionalidade centrada na utilidade**: Van máis alá da simple lectura/escritura bruta. **Scanner** pode dividir a entrada en **tokens** usando delimitadores personalizables, e **PrintWriter** garante que os saltos de liña (`println`) se representen correctamente independentemente da plataforma.
3. **Ferramentas de conveniencia para o desenvolvedor**: A súa principal vantaxe é a **sinxeleza de código** que proporcionan, automatizando tarefas complexas de parsing e formateo. Son a elección ideal cando se traballa con datos estruturados ou cando se require unha saída formateada e legible.

## Printwriter

A clase `PrintWriter`<i class="fa-copy">:copy:</i> facilita a escritura de texto, números e formatos. No seu construtor podemos pasarlle o *path* nun `String`<i class="fa-copy">:copy:</i>, un obxecto `File` ou 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/PrintWriter.html>
{% endhint %}

| **Método**                                                                       | **Descrición**                                                            |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `void print(String s)`<i class="fa-copy">:copy:</i>                              | Escribe unha cadea de texto sen salto de liña.                            |
| `void println(String s)`<i class="fa-copy">:copy:</i>                            | Escribe unha cadea de texto seguida dun salto de liña.                    |
| `PrintWriter printf(String format, Object... args)`<i class="fa-copy">:copy:</i> | Escribe texto formateado usando especificadores (`%d`, `%f`, `%s`, etc.). |
| `close()`<i class="fa-copy">:copy:</i>                                           | Pecha o escritor e libera os recursos asociados.                          |

**Exemplo**:

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

public class ExemploPrintWriter {
    public static void main(String[] args) {
        String path = "C:\\Users\\...\\Desktop\\exemploPS.txt";
        try (PrintWriter escritor = new PrintWriter(new FileWriter(path))) {
            escritor.println("Liña escrita con PrintWriter.");
            escritor.printf("Número formateado: %.2f\n", 10.256);
            System.out.println("Texto escrito con éxito.");
        } catch (IOException e) {
            System.out.println("Erro ao escribir.");
        }
    }
}
```

## Scanner

A clase `Scanner`<i class="fa-copy">:copy:</i> facilita a lectura de ficheiros, permitindo separar datos por espazos ou saltos de liña. No seu construtor debemos indicarlle un obxecto da clase `File`.

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

Aquí tes unha táboa cos principais métodos da clase `Scanner`<i class="fa-copy">:copy:</i> para ler ficheiros en Java:

| **Método**                                           | **Descrición**                                                                                        |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `boolean hasNext()`<i class="fa-copy">:copy:</i>     | Comproba se hai máis datos dispoñibles no ficheiro. Devolve `true` se hai máis datos, `false` se non. |
| `boolean hasNextLine()`<i class="fa-copy">:copy:</i> | Comproba se hai outra liña dispoñible no ficheiro.                                                    |
| `String next()`<i class="fa-copy">:copy:</i>         | Lee o seguinte *token* (palabra separada por espazos) do ficheiro.                                    |
| `String nextLine()`<i class="fa-copy">:copy:</i>     | Lee unha liña completa do ficheiro.                                                                   |
| `int nextInt()`<i class="fa-copy">:copy:</i>         | Lee o seguinte número enteiro do ficheiro.                                                            |
| `double nextDouble()`<i class="fa-copy">:copy:</i>   | Lee o seguinte número decimal do ficheiro.                                                            |
| `void close()`<i class="fa-copy">:copy:</i>          | Pecha o `Scanner`<i class="fa-copy">:copy:</i> e libera os recursos asociados.                        |

**Exemplo:**

```java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ExemploScanner {
    public static void main(String[] args) {
        String path = "C:\\Users\\iagom\\Desktop\\exemploPS.txt";
        try (Scanner lector = new Scanner(new File(path))){
            while (lector.hasNextLine()) {
                System.out.println(lector.nextLine());
            }
        } catch (FileNotFoundException e) {
            System.out.println("Erro: O ficheiro non foi atopado.");
        }
    }
}
```


---

# 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/scanner-e-printwriter.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.
