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:
BufferedReadereBufferedWriter: Para leitura e escrita de texto de forma eficiente.FileReadereFileWriter: Para leitura e escrita de arquivos de texto.FileInputStreameFileOutputStream: Para leitura e escrita de arquivos binários.ObjectInputStreameObjectOutputStream: 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:
BufferedReadereBufferedWriter: Usados para leitura e escrita de texto de forma eficiente, com buffer.FileReadereFileWriter: Usados para ler e escrever arquivos de texto, mas sem buffering.FileInputStreameFileOutputStream: Usados para ler e escrever arquivos binários (bytes).ObjectInputStreameObjectOutputStream: Usados para ler e escrever objetos Java (serialização).PrintWriter: Usado para escrever texto com formatação.
🧪 Quiz – 5 Questões Rápidas
- Qual classe é usada para ler arquivos de texto com um buffer para melhorar o desempenho?
A)FileReader
B)BufferedReader
C)FileInputStream
D)PrintWriter
- Qual classe é usada para escrever objetos Java em um arquivo?
A)FileWriter
B)BufferedWriter
C)ObjectOutputStream
D)PrintWriter
- Qual método da classe
FileOutputStreamescreve dados em um arquivo?
A)writeObject()
B)write()
C)println()
D)print()
- Qual classe você usaria para escrever texto formatado em um arquivo?
A)FileWriter
B)BufferedWriter
C)PrintWriter
D)FileInputStream
- Qual classe é usada para ler um arquivo binário, byte por byte?
A)BufferedReader
B)FileReader
C)FileInputStream
D)ObjectInputStream
✅ Gabarito Comentado
- B –
BufferedReaderusa buffers para melhorar a leitura de texto. - C –
ObjectOutputStreamé usado para gravar objetos Java em arquivos. - B –
write()é o método usado para escrever bytes em um arquivo comFileOutputStream. - C –
PrintWriterpermite escrever texto formatado. - C –
FileInputStreamé usado para ler arquivos binários byte a byte.