Fluxos de Dados em Java: Guia Completo de I/O

Fluxos de Nó

Fluxos de Byte

Fluxo de Entrada de Bytes do Arquivo

  1. Todos os fluxos que terminam com InputStream leem dados para o programa em formato de bytes
  2. Fluxos que herdam de InputStream são usados para entrada de dados, com unidade de dados em bytes (8 bits)

Métodos básicos:


/**
 * Lê um byte de cada vez do fluxo
 * Retorna um byte como valor inteiro (0-255)
 * Retorna -1 quando o fim do fluxo é atingido
 */
int read() throws IOException

/**
 * Lê uma sequência de bytes e armazena em um buffer
 * Retorna o número de bytes lidos, ou -1 se o fim do fluxo foi atingido
 */
int read(byte[] buffer) throws IOException

/**
 * Lê 'length' bytes
 * Armazena em um array de bytes a partir da posição 'offset'
 * Retorna o número de bytes lidos, ou -1 se o fim do fluxo foi atingido
 */
int read(byte[] buffer, int offset, int length) throws IOException

/**
 * Fecha o fluxo e libera recursos de memória
 */
void close() throws IOException

/**
 * Pula 'n' bytes sem lê-los
 * Retorna o número real de bytes pulados
 */
long skip(long n) throws IOException

Exemplo:


public class ExemploFluxoEntradaBytes {
    public static void main(String[] args) throws IOException {
        // 1. Cria FileInputStream com o caminho do arquivo
        InputStream fluxoEntrada = new FileInputStream("C:\\dados.txt");
        
        byte[] buffer = new byte[1024];
        while (fluxoEntrada.read(buffer) != -1) {
            System.out.println(new String(buffer));
        }
        fluxoEntrada.close();
    }
}

Resultado:


test : este é um TEXTO

Fluxo de Saída de Bytes do Arquivo

Métodos básicos:


/**
 * Escreve um byte no fluxo de saída
 * O byte escrito corresponde aos 8 bits inferiores do parâmetro b
 */
void write(int b) throws IOException

/**
 * Escreve todos os bytes de um array no fluxo de saída
 */
void write(byte[] b) throws IOException

/**
 * Escreve 'len' bytes de um array a partir da posição 'off'
 */
void write(byte[] b, int off, int len) throws IOException

/**
 * Fecha o fluxo e libera recursos de memória
 */
void close() throws IOException

/**
 * Força a escrita de todos os dados do buffer para o destino
 */
void flush() throws IOException

Exemplo:


public class ExemploFluxoSaidaBytes {
    public static void main(String[] args) {
        int dado;
        try (FileInputStream entrada = new FileInputStream("C:\\origem.txt");
             FileOutputStream saida = new FileOutputStream("C:\\destino.txt")) {
            
            while ((dado = entrada.read()) != -1) {
                saida.write(dado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Fluxos de Caracteres

Fluxo de Entrada de Caracteres do Arquivo

Métodos básicos:


/**
 * Lê um caractere e retorna como valor inteiro (0-65535)
 * Retorna -1 quando o fim do fluxo é atingido
 */
int read() throws IOException

/**
 * Lê uma sequência de caracteres e armazena em um array buffer
 * Retorna o número de caracteres lidos, ou -1 se o fim do fluxo foi atingido
 */
int read(char[] buffer) throws IOException

/**
 * Lê 'length' caracteres
 * Armazena em um array de caracteres a partir da posição 'offset'
 * Retorna o número de caracteres lidos, ou -1 se o fim do fluxo foi atingido
 */
int read(char[] buffer, int offset, int length) throws IOException

/**
 * Fecha o fluxo e libera recursos de memória
 */
void close() throws IOException

/**
 * Pula 'n' caracteres sem lê-los
 * Retorna o número real de caracteres pulados
 */
long skip(long n) throws IOException

Exemplo:


public class ExemploFluxoEntradaCaracteres {
    public static void main(String[] args) throws IOException {
        char[] buffer = new char[2];
        FileReader leitorArquivo = new FileReader("C:\\texto.txt");
        while ((leitorArquivo.read(buffer)) != -1) {
            System.out.println(new String(buffer));
        }
    }
}

Resultado:


Olá
Mundo!

Fluxo de Saída de Caracteres do Arquivo

Métodos básicos:


/**
 * Escreve um caractere no fluxo de saída
 * O caractere escrito corresponde aos 16 bits inferiores do parâmetro b
 */
void write(int b) throws IOException

/**
 * Escreve todos os caracteres de um array no fluxo de saída
 */
void write(char[] c) throws IOException

/**
 * Escreve 'length' caracteres de um array a partir da posição 'offset'
 */
void write(char[] c, int off, int length) throws IOException

/**
 * Escreve uma string no fluxo de saída
 */
void write(String str) throws IOException

/**
 * Escreve uma parte de uma string no fluxo de saída
 */
void write(String str, int off, int len) throws IOException

/**
 * Fecha o fluxo e libera recursos de memória
 */
void close() throws IOException

/**
 * Força a escrita de todos os dados do buffer para o destino
 */
void flush() throws IOException

Exemplo:


public class ExemploFluxoSaidaCaracteres {
    public static void main(String[] args) throws IOException {
        FileReader leitor = new FileReader("C:\\origem.txt");
        FileWriter escritor = new FileWriter("C:\\destino.txt");
        int caractere;
        while ((caractere = leitor.read()) != -1) {
            System.out.print((char) caractere);
            escritor.write(caractere);
        }
        leitor.close();
        escritor.close();
    }
}

Fluxos Bufferizados

Fluxos Bufferizados de Entrada e Saída de Bytes


public class ExemploFluxosBufferizadosBytes {
    public static void main(String[] args) throws IOException {
        FileInputStream fluxoEntrada = new FileInputStream("C:\\dados.txt");
        BufferedInputStream fluxoBufferizadoEntrada = new BufferedInputStream(fluxoEntrada);
        
        FileOutputStream fluxoSaida = new FileOutputStream("C:\\saida.txt");
        BufferedOutputStream fluxoBufferizadoSaida = new BufferedOutputStream(fluxoSaida);
        
        int dado;
        while ((dado = fluxoBufferizadoEntrada.read()) != -1) {
            System.out.print((char) dado);
            fluxoBufferizadoSaida.write(dado);
        }
        fluxoBufferizadoSaida.flush();
        
        fluxoEntrada.close();
        fluxoBufferizadoEntrada.close();
        fluxoSaida.close();
        fluxoBufferizadoSaida.close();
    }
}

Fluxos Bufferizados de Entrada e Saída de Caracteres


public class ExemploFluxosBufferizadosCaracteres {
    public static void main(String[] args) throws IOException {
        FileReader leitor = new FileReader("C:\\texto.txt");
        BufferedReader leitorBufferizado = new BufferedReader(leitor);
        
        FileWriter escritor = new FileWriter("C:\\saida.txt");
        BufferedWriter escritorBufferizado = new BufferedWriter(escritor);
        
        String linha = leitorBufferizado.readLine();
        while (linha != null) {
            System.out.print(linha);
            escritorBufferizado.write(linha);
            linha = leitorBufferizado.readLine();
        }
        escritorBufferizado.flush();
        
        leitor.close();
        leitorBufferizado.close();
        escritor.close();
        escritorBufferizado.close();
    }
}

Tags: java io fluxos buffer entrada

Publicado em 6-15 22:50 por Thomas