✅ Leitura e Escrita com Classes do Pacote java.io

No Java, o pacote java.io fornece várias classes para lidar com entrada e saída (IO) de dados, como leitura e escrita de arquivos. Algumas das classes mais comuns são:

  • BufferedReader e BufferedWriter: Para leitura e escrita de texto de forma eficiente.
  • FileReader e FileWriter: Para leitura e escrita de arquivos de texto.
  • FileInputStream e FileOutputStream: Para leitura e escrita de arquivos binários.
  • ObjectInputStream e ObjectOutputStream: Para leitura e escrita de objetos Java.
  • PrintWriter: Para escrever texto com formatação.

Vamos explorar cada uma dessas classes com exemplos.


1. BufferedReader e BufferedWriter

Essas classes são usadas para leitura e escrita de arquivos de forma eficiente. Elas utilizam buffers internos para melhorar o desempenho, especialmente quando você trabalha com arquivos grandes.

Exemplo de BufferedReader:

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

public class BufferedReaderExemplo {
    public static void main(String[] args) {
        try (BufferedReader reader = 
new BufferedReader(new FileReader("arquivo.txt"))) {
            String linha;
            while ((linha = reader.readLine()) != null) {
            // Imprime cada linha do arquivo
                System.out.println(linha);  
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Exemplo de BufferedWriter:

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

public class BufferedWriterExemplo {
    public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("arquivo_saida.txt"))) {
            writer.write("Olá, Mundo!");
            writer.newLine();
            writer.write("Este é um exemplo de BufferedWriter.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

O BufferedWriter ao executar utilizando o try-with-resources ele fecha o recurso que foi aberto no try no caso o BufferedWriter. Se usar sem o try-with-resources e não fechar o recurso ex: writer.close() vai acontecer que ele vai criar o arquivo mas não vai escrever nele, pois só escreve se fechar o recurso ao finalizar o programa.


2. FileReader e FileWriter

As classes FileReader e FileWriter são usadas para ler e escrever arquivos de texto. Elas são mais simples, mas menos eficientes em comparação com o BufferedReader e BufferedWriter.

Exemplo de FileReader:

import java.io.FileReader;
import java.io.IOException;

public class FileReaderExemplo {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("arquivo.txt")) {
            int c;
            while ((c = reader.read()) != -1) {
                System.out.print((char) c);  // Imprime os caracteres do arquivo
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Exemplo de FileWriter:

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

public class FileWriterExemplo {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("arquivo_saida.txt")) {
            writer.write("Escrevendo no arquivo com FileWriter!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. FileInputStream e FileOutputStream

As classes FileInputStream e FileOutputStream são usadas para ler e escrever arquivos binários.

Exemplo de FileInputStream:

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamExemplo {
    public static void main(String[] args) {
        try (FileInputStream inputStream = new FileInputStream("arquivo.bin")) {
            int byteData;
            while ((byteData = inputStream.read()) != -1) {
                System.out.print((char) byteData);  // Imprime byte a byte
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Exemplo de FileOutputStream:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExemplo {
    public static void main(String[] args) {
        try (FileOutputStream outputStream = new FileOutputStream("arquivo_saida.bin")) {
            outputStream.write(65);  // Escreve o byte correspondente ao caractere 'A'
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. ObjectInputStream e ObjectOutputStream

Essas classes são usadas para ler e escrever objetos Java de forma serializada. Elas permitem que você salve e recupere objetos completos, incluindo suas propriedades.

Exemplo de ObjectOutputStream:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamExemplo {
    public static void main(String[] args) {
        try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("objeto.ser"))) {
            String nome = "João";
            int idade = 25;
            outputStream.writeObject(nome);
            outputStream.writeInt(idade);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Exemplo de ObjectInputStream:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamExemplo {
    public static void main(String[] args) {
        try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("objeto.ser"))) {
            String nome = (String) inputStream.readObject();
            int idade = inputStream.readInt();
            System.out.println("Nome: " + nome);
            System.out.println("Idade: " + idade);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

5. PrintWriter

A classe PrintWriter é uma forma conveniente de escrever texto no console ou em arquivos, com métodos de formatação.

Exemplo de PrintWriter:

import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class PrintWriterExemplo {
    public static void main(String[] args) {
        try (PrintWriter writer = new PrintWriter("arquivo_saida.txt")) {
            writer.println("Este é um exemplo de PrintWriter.");
            writer.printf("Número formatado: %.2f%n", 123.456);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

🔑 Resumo das Classes:

  • BufferedReader e BufferedWriter: Usados para leitura e escrita de texto de forma eficiente, com buffer.
  • FileReader e FileWriter: Usados para ler e escrever arquivos de texto, mas sem buffering.
  • FileInputStream e FileOutputStream: Usados para ler e escrever arquivos binários (bytes).
  • ObjectInputStream e ObjectOutputStream: Usados para ler e escrever objetos Java (serialização).
  • PrintWriter: Usado para escrever texto com formatação.

🧪 Quiz – 5 Questões Rápidas

  1. Qual classe é usada para ler arquivos de texto com um buffer para melhorar o desempenho?
    A) FileReader
    B) BufferedReader
    C) FileInputStream
    D) PrintWriter

  1. Qual classe é usada para escrever objetos Java em um arquivo?
    A) FileWriter
    B) BufferedWriter
    C) ObjectOutputStream
    D) PrintWriter

  1. Qual método da classe FileOutputStream escreve dados em um arquivo?
    A) writeObject()
    B) write()
    C) println()
    D) print()

  1. Qual classe você usaria para escrever texto formatado em um arquivo?
    A) FileWriter
    B) BufferedWriter
    C) PrintWriter
    D) FileInputStream

  1. Qual classe é usada para ler um arquivo binário, byte por byte?
    A) BufferedReader
    B) FileReader
    C) FileInputStream
    D) ObjectInputStream

Gabarito Comentado

  1. BBufferedReader usa buffers para melhorar a leitura de texto.
  2. CObjectOutputStream é usado para gravar objetos Java em arquivos.
  3. Bwrite() é o método usado para escrever bytes em um arquivo com FileOutputStream.
  4. CPrintWriter permite escrever texto formatado.
  5. CFileInputStream é usado para ler arquivos binários byte a byte.