Fácil Java
Leitura de arquivo com try-with-resources
Enunciado
Escreva um programa que leia o arquivo dados.txt (crie-o com algumas linhas) e imprima cada linha no console. Use try-with-resources para garantir que o arquivo seja fechado automaticamente.
Requisitos
- Use
BufferedReaderdentro de um bloco try-with-resources. - Trate a exceção
IOExceptioncom um blococatch. - Imprima cada linha do arquivo.
- O programa deve compilar e executar sem erros.
Código inicial
import java.io.*;
public class LeituraArquivo {
public static void main(String[] args) {
// Seu código aqui
}
}
Saída esperada
Linha 1
Linha 2
Linha 3
Ver dica
Use new FileReader("dados.txt") e new BufferedReader(...) no try-with-resources. O método readLine() retorna null no fim do arquivo.
Mostrar solução
import java.io.*;
public class LeituraArquivo {
public static void main(String[] args) {
// Cria o arquivo de teste se não existir
File arquivo = new File("dados.txt");
if (!arquivo.exists()) {
try (PrintWriter pw = new PrintWriter(arquivo)) {
pw.println("Linha 1");
pw.println("Linha 2");
pw.println("Linha 3");
} catch (FileNotFoundException e) {
System.err.println("Erro ao criar arquivo: " + e.getMessage());
return;
}
}
// Leitura com try-with-resources
try (BufferedReader br = new BufferedReader(new FileReader(arquivo))) {
String linha;
while ((linha = br.readLine()) != null) {
System.out.println(linha);
}
} catch (IOException e) {
System.err.println("Erro ao ler arquivo: " + e.getMessage());
}
}
}
Passo a passo
- Criamos um objeto
Filepara representar o arquivodados.txt. Se ele não existir, criamos comPrintWritertambém dentro de um try-with-resources. - No bloco
try, declaramosBufferedReader br = new BufferedReader(new FileReader(arquivo)). Isso abre o arquivo para leitura. - O loop
while ((linha = br.readLine()) != null)lê cada linha até o fim do arquivo. - Cada linha lida é impressa com
System.out.println(linha). - Ao final do bloco
try, oBufferedReaderé fechado automaticamente, mesmo se ocorrer uma exceção. - O bloco
catchtrata possíveis erros de entrada/saída.
Por que funciona
O try-with-resources garante que o método close() do BufferedReader seja chamado automaticamente ao final do bloco, liberando o arquivo. Isso evita vazamentos de recursos e simplifica o código, eliminando a necessidade de um bloco finally explícito.
Erros comuns
- Esquecer de tratar a exceção: O compilador exige que
IOExceptionseja tratada ou declarada. Se não colocarcatchnemthrows, ocorre erro de compilação. - Usar
FileReadersemBufferedReader: Funciona, mas é menos eficiente. OBufferedReadermelhora a performance com buffer. - Não verificar se o arquivo existe: Se o arquivo não existir,
FileReaderlançaFileNotFoundException. Nosso código cria o arquivo antes, mas em outros contextos é preciso tratar.
Outra forma de resolver
Usar Scanner com try-with-resources:
try (Scanner sc = new Scanner(new File("dados.txt"))) {
while (sc.hasNextLine()) {
System.out.println(sc.nextLine());
}
}
É preferível quando se deseja parsing de tipos primitivos.
Saída esperada
Linha 1
Linha 2
Linha 3