DEV Community

Cap 10 Usando I/O

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();
}

Enter fullscreen mode Exit fullscreen mode

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();
}

Enter fullscreen mode Exit fullscreen mode

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();
}

Enter fullscreen mode Exit fullscreen mode

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.

Image description

Image description

Top comments (0)