🚀 Capítulo 14: Trabalhando com Arquivos

🎯 Objetivo da Aula

Ao final desta aula, você será capaz de ler e escrever dados em arquivos de texto (.txt) utilizando as classes do Java, compreendendo o conceito básico de persistência de dados.


🏢 O Cenário Prático (Seu Desafio)

Você é um engenheiro da Aliança Rebelde. O droide R2-D2 interceptou os planos da Estrela da Morte! O seu desafio é criar um programa que salve esses planos em um arquivo de texto no computador e, depois, crie outro programa para ler o arquivo e encontrar o ponto fraco da estação espacial.


🧠 Fundamentos: A Teoria Traduzida

Até agora, todos os dados que digitamos sumiam quando o programa era fechado. Para salvar dados permanentemente, usamos Arquivos.

  • File: Representa o arquivo no disco.
  • FileWriter e PrintWriter: Servem para escrever dados no arquivo (como uma caneta escrevendo no papel).
  • Scanner: Pode ser usado também para ler dados de um arquivo (como os nossos olhos lendo o papel).

Fluxo de Persistência

flowchart LR
    A["Seu Programa Java"] -->|Escrita| B["Arquivo planos.txt"]
    B -->|Leitura| A

📖 Exemplo Guiado

Vamos criar o programa que salva e lê os planos da Estrela da Morte.

🛠️ Passo a Passo para Criar o Projeto no VS Code

  1. Abra o VS Code.
  2. Pressione as teclas Ctrl + Shift + P (ou Cmd + Shift + P no Mac).
  3. Digite Java: Create Java Project e pressione Enter.
  4. Selecione a opção No build tools.
  5. Escolha uma pasta no seu computador e clique em Select the location.
  6. Digite o nome do projeto: rebeldes-projeto e pressione Enter.

📂 Estrutura Inicial de Pastas

rebeldes-projeto/
├── lib/
└── src/
    └── App.java (pode apagar este arquivo)

Siga os passos para criar os arquivos dentro da pasta src:

  1. Crie o arquivo EscritaPlanos.java (para salvar os planos):
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class EscritaPlanos {
    public static void main(String[] args) {
        try {
            // Cria ou abre o arquivo para escrita
            FileWriter arquivo = new FileWriter("planos_estrela_morte.txt");
            PrintWriter gravar = new PrintWriter(arquivo);
 
            // Escreve as linhas no arquivo
            gravar.println("PLANO DA ESTRELA DA MORTE");
            gravar.println("Ponto fraco: Entrada de exaustão térmica.");
            gravar.println("Localização: Fim da trincheira principal.");
 
            gravar.close(); // Fecha o arquivo (MUITO IMPORTANTE)
            System.out.println("Planos salvos com sucesso pelo R2-D2!");
        } catch (IOException e) {
            System.out.println("Erro ao salvar os planos: " + e.getMessage());
        }
    }
}
  1. Crie o arquivo LeituraPlanos.java (para ler os planos):
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class LeituraPlanos {
    public static void main(String[] args) {
        try {
            File arquivo = new File("planos_estrela_morte.txt");
            Scanner leitor = new Scanner(arquivo);
 
            System.out.println("--- Lendo Planos Secretos ---");
            // Enquanto houver linhas para ler no arquivo
            while (leitor.hasNextLine()) {
                String linha = leitor.nextLine();
                System.out.println(linha);
            }
            leitor.close();
        } catch (FileNotFoundException e) {
            System.out.println("Erro: Arquivo não encontrado!");
        }
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Certifique-se de que o arquivo planos_estrela_morte.txt está na raiz do seu projeto (fora da pasta src).
  2. Abra o arquivo LeituraPlanos.java.
  3. Clique em Run logo acima do método main.

Resultado Esperado:

--- Lendo Planos Secretos ---
1. Reator principal vulnerável a torpedos de prótons.
2. Não há grades de proteção nas passarelas.


🛠️ Prática Obrigatória 1

Crie um programa chamado ListaRebeldes.java. O programa deve pedir para o usuário digitar o nome de 3 heróis da rebelião e salvar esses nomes em um arquivo chamado herois.txt, um em cada linha.

Resultado Esperado: Um arquivo chamado herois.txt será criado na raiz do projeto contendo os 3 nomes digitados.



🛠️ Prática Obrigatória 2

Crie um programa chamado MostrarRebeldes.java. O programa deve ler o arquivo herois.txt criado na Prática 1 e exibir a lista numerada na tela (ex: “1. Luke”, “2. Leia”).

Resultado Esperado:

Conteúdo do ArquivoSaída Esperada no Console
Luke
Leia
Han
1. Luke
2. Leia
3. Han

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. Faça o Commit:
    • No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex: Finaliza atividades do Capítulo 14.
    • Clique no botão azul Commit to main (ou o nome da sua branch).
  5. Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
  6. ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
  7. Como entregar no Microsoft Teams:
    • Copie o link do seu repositório no GitHub (ex: https://github.com/seu-usuario/seu-repositorio).
    • Abra a tarefa correspondente no Microsoft Teams.
    • Clique no botão Adicionar trabalho (ou Add work).
    • Selecione a opção Link no menu lateral.
    • Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex: Meu Repositório) no campo “Texto a ser exibido”.
    • Clique em Anexar.
    • MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!

📂 Estrutura Final de Pastas

Após rodar os programas, os arquivos de texto serão criados na raiz do projeto:

rebeldes-projeto/
├── lib/
├── src/
│   ├── EscritaPlanos.java
│   ├── LeituraPlanos.java
│   ├── ListaRebeldes.java
│   └── MostrarRebeldes.java
├── herois.txt
└── planos_estrela_morte.txt

💡 Checkpoint de Lógica

O que você acabou de fazer é Persistência de Dados. Mesmo em sistemas gigantes, onde usamos Bancos de Dados complexos, a base de tudo é o sistema operacional gravando e lendo bits do disco rígido, exatamente como fizemos com o arquivo .txt!


🔥 Desafio de Fixação (Opcional)

Pesquise como abrir o FileWriter em modo “append” (para adicionar novos dados ao final do arquivo sem apagar o que já estava lá). Adicione mais um herói à lista criada na Prática 1.


🔑 Gabarito de Código/Fórmulas

Prática 1:

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
 
public class ListaRebeldes {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            FileWriter arquivo = new FileWriter("herois.txt");
            PrintWriter gravar = new PrintWriter(arquivo);
 
            for (int i = 1; i <= 3; i++) {
                System.out.print("Digite o nome do herói " + i + ": ");
                String nome = sc.nextLine();
                gravar.println(nome);
            }
 
            gravar.close();
            System.out.println("Lista de heróis salva!");
        } catch (IOException e) {
            System.out.println("Erro ao gravar arquivo.");
        } finally {
            sc.close();
        }
    }
}

Prática 2:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class MostrarRebeldes {
    public static void main(String[] args) {
        try {
            File arquivo = new File("herois.txt");
            Scanner leitor = new Scanner(arquivo);
 
            System.out.println("--- Aliança Rebelde ---");
            int i = 1;
            while (leitor.hasNextLine()) {
                String nome = leitor.nextLine();
                System.out.println(i + ". " + nome);
                i++;
            }
            leitor.close();
        } catch (FileNotFoundException e) {
            System.out.println("Arquivo herois.txt não encontrado!");
        }
    }
}

Desafio:

// Para ativar o modo append, passe 'true' no construtor do FileWriter:
FileWriter arquivo = new FileWriter("herois.txt", true);

Capitulo Anterior | Proximo Capitulo