Principais habilidades e conceitos
• Entender o fluxo
• Saber a diferença entre fluxos de bytes e de caracteres
• Conhecer as classes de fluxos de bytes Java
• Conhecer as classes de fluxos de caracteres Java
• Conhecer os fluxos predefinidos
• Usar fluxos de bytes
• Usar fluxos de bytes para I/O de arquivo
• Fechar automaticamente um arquivo usando try-with-resources
• Ler e gravar dados binários
• Usar arquivos de acesso aleatório
• Usar fluxos de caracteres
• Usar fluxos de caracteres para I/O de arquivo
• Aplicar encapsuladores de tipo Java para converter strings numéricos
I/O Java é baseado em fluxos
Principais Conceitos de I/O em Java
Fluxo de Dados:
- É a base do sistema de I/O em Java, representando uma abstração para produzir ou consumir informações.
- O fluxo é vinculado a dispositivos físicos (como console, arquivos) e permite usar as mesmas classes para diferentes tipos de dispositivos.
- Fluxos de Bytes vs. Fluxos de Caracteres: Fluxo de Bytes:
- Usado para dados binários, principalmente em arquivos. É útil para leitura e gravação byte a byte.
- Fluxo de Caracteres: Usado para manipulação de caracteres, suportando Unicode e sendo ideal para textos.
Hierarquia de Classes:
InputStream e OutputStream:
- Classes abstratas base para fluxos de entrada e saída de bytes.
- Reader e Writer: Base para fluxos de entrada e saída de caracteres.
Classes de Fluxos de Bytes
As principais classes de fluxos de bytes incluem:
- FileInputStream e FileOutputStream: Para leitura e gravação em arquivos.
- DataInputStream e DataOutputStream: Para leitura e gravação de tipos de dados Java (ex. int, float).
- BufferedInputStream e BufferedOutputStream: Armazenamento em buffer para melhor desempenho.
Exemplo: Leitura e gravação com FileInputStream e FileOutputStream.
try (FileInputStream in = new FileInputStream("entrada.txt");
FileOutputStream out = new FileOutputStream("saida.txt")) {
int byteData;
while ((byteData = in.read()) != -1) {
out.write(byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
Uso de try-with-resources
Garantir que os recursos, como arquivos, sejam fechados automaticamente após o uso.
try (FileOutputStream fos = new FileOutputStream("arquivo.txt")) {
fos.write("Texto de exemplo".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
Classes de Fluxos de Caracteres
- FileReader e FileWriter: Para ler e escrever caracteres em arquivos.
- BufferedReader e BufferedWriter: Armazenamento em buffer para leitura e escrita de texto mais eficiente.
Exemplo: Leitura e gravação com FileReader e BufferedWriter.
try (FileReader fr = new FileReader("entrada.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter("saida.txt"))) {
int charData;
while ((charData = fr.read()) != -1) {
bw.write(charData);
}
} catch (IOException e) {
e.printStackTrace();
}
Outros Recursos
- ObjectInputStream e ObjectOutputStream: Para manipulação de objetos completos.
- RandomAccessFile: Para acesso aleatório aos dados no arquivo, possibilitando leitura e gravação em posições específicas.
Este capítulo introduz conceitos fundamentais para trabalhar com arquivos e manipulação de dados em Java, essencial para muitos tipos de aplicações, especialmente onde armazenamento persistente e leitura eficiente de dados são necessários.