Visão geral de Java I/O Streams

Importando dados em Java

Anthony Markham

VP Quant Developer

Fundamentos de Streams

  • Streams são canais unidirecionais de dados com ordem FIFO (First In, First Out)
  • Fluxos de bytes trabalham com dados binários brutos (InputStream/OutputStream)
  • Fluxos de caracteres lidam com texto com codificação automática (Reader/Writer)

Representação de Streams

Importando dados em Java

Fluxos de Bytes

  • Usado para dados binários (imagens, áudio, etc.)
  • Classes abstratas base: InputStream (leitura), OutputStream (escrita)
  • Implementações principais: FileInputStream, FileOutputStream
  • Métodos principais: read() retorna bytes, write() escreve bytes

Arquivos binários: imagens e áudios

Importando dados em Java

Fluxos de Bytes

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Processar bytes no buffer
System.out.println("Lidos " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Erro: " + e.getMessage()); }
Importando dados em Java

Fluxos de Caracteres

  • Projetado especificamente para dados de texto
  • Classes abstratas base: Reader (leitura de texto), Writer (escrita de texto)
  • Implementações principais: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Métodos convenientes: readLine() lê uma linha completa de texto

Arquivos CSV

Importando dados em Java

Fluxos de Caracteres

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Processar cada linha System.out.println(line); }
} catch (Exception e) { System.err.println("Erro: " + e.getMessage()); }
Importando dados em Java

Streams Bufferizados - desempenho

  • Melhora o desempenho reduzindo operações de disco
  • Ler/escrever fluxos de bytes com BufferedInputStream e BufferedOutputStream
  • Ler/escrever fluxos de caracteres com BufferedReader, BufferedWriter
    • Ler uma linha inteira com readLine()
Importando dados em Java

Streams Bufferizados - desempenho

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Processamento do cabeçalho
    String header = reader.readLine();
    System.out.println("Cabeçalho: " + header);

// Leitura eficiente de dados String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Lidas " + count + " linhas de dados"); } catch (Exception e) { System.out.println("Erro: " + e.getMessage()); }
Importando dados em Java

Encadeamento de Streams

  • Cada stream na cadeia adiciona funcionalidade específica
  • Padrão comum: FileInputStream -> InputStreamReader -> BufferedReader
  • Sempre feche o stream mais externo (os outros fecham automaticamente)
Importando dados em Java

Encadeamento de Streams

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Erro: " + e.getMessage()); }
Importando dados em Java

Tratamento de Exceções

  • Crucial para operações de I/O
  • Exceções comuns: IOException, FileNotFoundException
  • Sempre use try-with-resources para capturar exceções
Importando dados em Java

Tratamento de Exceções

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream fechado automaticamente aqui return lines;
}
Importando dados em Java

Vamos praticar!

Importando dados em Java

Preparing Video For Download...