Java/Fluxos de entrada e saída

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

A entrada e saída de dados em Java é feita através de streams.

Uma stream é uma sequência ordenada de bytes ou caracteres de tamanho indefinido. Streams podem ser abertas e fechadas pelo programa; algumas vezes, estas operações são feitas de forma automática (normalmente em caso de erro).

Um programa que usa uma stream deve incluir a biblioteca java.io, ou seja, deve incluir logo no início:

  import java.io.*;

ou instruções equivalentes.

Assim como em C/C++, uma stream não é usada diretamente através do nome do arquivo; é preciso abri-la como um File para depois usar as operações em streams.

Por exemplo, o programa abaixo pega o arquivo "teste1.txt" e copia seu conteúdo (bit-a-bit) para o arquivo "teste2.txt":

  import java.io.*;
 
  public class exemplo_io {
      public static void main(String[] args) throws IOException {
          File inputFile = new File("teste1.txt");
          File outputFile = new File("teste2.txt");
 
          FileReader in = new FileReader(inputFile);
          FileWriter out = new FileWriter(outputFile);
          int c;
 
          while ((c = in.read()) != -1)
             out.write(c);
 
          in.close();
          out.close();
      }
  }

Explicações:

  File inputFile = new File("teste1.txt")
  File outputFile = new File("teste2.txt")

apenas associam os streams inputFile e outputFile aos nomes "teste1.txt" e "teste2.txt". Neste ponto, não foi dito que "teste1.txt" é entrada, nem que "teste2.txt" é saída (obvimente, os nomes inputFile e outputFile são apenas conveniência para o leitor do programa).

  FileReader in = new FileReader(inputFile);
  FileWriter out = new FileWriter(outputFile);

Neste ponto são criados os dois streams. in é o stream de entrada, e out é o stream de saída. Como, na declaração do main, previmos uma exceção no I/O, caso o arquivo de entrada "teste1.txt" não exista, será gerada uma mensagem de erro.

  int c;
  while ((c = in.read()) != -1)
    out.write(c);

c é um inteiro. read, enquanto houver elementos para serem lidos, retorna números naturais, e retorna -1 no final. write escreve este número. Este loop (extremamente ineficiente para arquivos grandes!) faz a cópia, caracter a caracter, do arquivo de entrada para o arquivo de saída.

  in.close();
  out.close();

fecha os streams.

<div class="noprint" id="auto-nav-inf"> <ul class="auto-nav"> <li class="auto-nav-index"><a title="Acima: Java" href="/wiki/Java">Java</a></li> <li class="auto-nav-prev"><a class="new" title="Anterior: Tratamento de erros e correções na linguagem Java" href="/wiki/Java/Tratamento_de_erros_e_corre%C3%A7%C3%B5es_na_linguagem_Java">Tratamento de erros e correções na linguagem Java</a></li> <li class="auto-nav-next"><a class="new" title="Posterior: Manipulação de arquivos" href="/wiki/Java/Manipula%C3%A7%C3%A3o_de_arquivos">Manipulação de arquivos</a></li> </ul></div> <div class="printonly">Obtido em "http://pt.wikibooks.org/w/index.php?title=Java/Fluxos_de_entrada_e_saída&oldid=205111"</div>