🚀 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.FileWriterePrintWriter: 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
- Abra o VS Code.
- Pressione as teclas
Ctrl + Shift + P(ouCmd + Shift + Pno Mac). - Digite
Java: Create Java Projecte pressioneEnter. - Selecione a opção
No build tools. - Escolha uma pasta no seu computador e clique em Select the location.
- Digite o nome do projeto:
rebeldes-projetoe pressioneEnter.
📂 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:
- 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());
}
}
}- 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
- Certifique-se de que o arquivo
planos_estrela_morte.txtestá na raiz do seu projeto (fora da pastasrc). - Abra o arquivo
LeituraPlanos.java. - 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 Arquivo | Saí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:
- Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
- Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
- Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
- 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).
- No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex:
- 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.
- ⚠️ 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.
- 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!
- Copie o link do seu repositório no GitHub (ex:
📂 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);