170 likes | 285 Views
Streams –input e output. streams. Stream : uma abstracção para uma “origem” ou “ destino” de dados Os bytes “ fluem de (input) para ” (output) streams Podem representar múltiplas fontes de dados: Ficheiros em disco Outros computadores em rede Páginas web
E N D
streams Stream: uma abstracção para uma “origem” ou “destino” de dados • Os bytes “fluem de (input) para” (output) streams • Podem representar múltiplas fontes de dados: • Ficheiros em disco • Outros computadores em rede • Páginas web • Dispositivos de entrada (teclado, rato, etc.)
Input streams Métodos comuns a todas as “input streams”: • intread() throwsIOException • lê um byte (caracter) de dados • voidreset() throwsIOException • inicia a stream para que os seus bytes possam ser lidos novamente • voidclose() throwsIOException • notifica a stream de que ela vai deixar de ser usada
Output streams • Métodos comuns a todas as “input streams”: • void write(int n) throws IOException • escreve um byte (caracter) de dados • voidflush() throwsIOException • escreve os bytes que estavam à espera para ser escritos • voidclose() throwsIOException • notifica a stream de que de que ela vai deixar de ser usada
Java.io • Java.io é o package Java que contém todas as classes que manipulam as entradas e saídas dos programas escritos em Java. • A ideia do Java.io é utilizar fluxos de entrada (InputStream) e de saída (OutputStream) para toda e qualquer operação, seja ela relativa a um ficheiro, a uma ligação remota via sockets ou até mesmo a entrada e saída padrão de um programa.
Leitura de ficheiros Abrir um ficheiro para leitura Sintaxe: BufferedReadernomeStreamInput = newBufferedReader(newFileReader(nomeFicheiro)); • Exemplo: BufferedReaderinStream = newBufferedReader(newFileReader(“in.txt”));
Leitura de ficheiros – exemplo 1 import java.io.*; publicclass ex1 { publicstaticvoid main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("arquivo.txt")); String s = br.readLine(); System.out.println(s); } } É criado um buffer (BufferedReader) para efectuar a leitura do ficheiro “arquivo.txt” É lida apenas a primeira linha do ficheiro String s = br.readLine(); e guardada na Variável “S”. Se correr o programa vai ocorrer o seguinte erro: Qual o motivo???
Leitura de ficheiros – exemplo 1 O erro ocorre porque o ficheiro ainda não foi criado. Para evitar que o programa pare devido a erros, utilizam-se as excepções try{} e catch{}. Assim, em vez de parar de forma inexplicável, é mostrada uma mensagem de erro. importjava.io.*; publicclass ex1 { publicstaticvoidmain(String[] args) throwsIOException { try{ BufferedReaderbr = newBufferedReader(newFileReader("arquivo.txt")); String s = br.readLine(); System.out.println(s); } catch(IOException e){ System.out.println("O ficheiro não existe!"); System.out.println("Fim do programa!"); } } }
Leitura de ficheiros – Exemplo 1 • Para que o programa deste exemplo funcione é necessário criar o ficheiro “arquivo.txt”. Procede-se do seguinte modo: Clicar com o botão direito do rato em cima do projecto E escolher New-File. Gravar o ficheiro com o nome “arquivo.txt”. Os ficheiros criados podem ser acedidos na pasta C:\progEcclips\Nome_projecto. Digite “Programação em Java” no ficheiro criado. Pode agora correr o programa. Deve surgir no ecrã a mensagem “Programação em Java”.
Leitura de Ficheiros – Exemplo 2 Para ler um ficheiro de texto utilizamos as classes FileReader e BufferedReader do pacote java.io publicclass ex3{ publicstaticvoid main(String[] args){ String nomeFx= "teste.txt"; try { BufferedReader in = new BufferedReader(new FileReader(nomeFx)); String str; while((str = in.readLine()) != null){ System.out.println(str); } in.close(); } catch (IOException e){ System.out.println("Impossível ler o ficheiro " + nomeFx); System.out.println("fim do programa..."); } System.out.println("Terminou a leitura do ficheiro!!!"); } } Enquanto existirem linhas no ficheiro, o conteúdo do ficheiro é mostrado no ecrã Se o ficheiro não existir, ocorre o erro. Nota: O ficheiro deve ser criado antes da execução do programa, senão ocorre o erro que se encontra no bloco catch. Após ser efectuada a leitura do ficheiro, este deve ser fechado (in.close()).
Leitura de ficheiros – contagem das linhas de um ficheiro publicclass contaLinhas{ publicstaticvoid main(String[] args){ String nomeFx= "novo.txt"; int conta=0; try { BufferedReader in = new BufferedReader(new FileReader(nomeFx)); String str; while((str = in.readLine()) != null){ conta++; } in.close(); } catch (IOException e){ System.out.println("Impossível ler o ficheiro " + nomeFx); System.out.println("fim do programa..."); } System.out.println("O ficheiro contem " + conta + " linhas"); } } O ficheiro é percorrido e as linhas vão sendo contadas e guardadas na variável conta
Escrita de Ficheiros Abrir um ficheiro para escrita Sintaxe: BufferedWriter nomeStreamOutput= newBufferedWriter(newFileWriter(nomeFicheiro)); • Exemplo: BufferedWriter outStream = new BufferedWriter(new FileWriter(“out.txt”));
Escrita de caracteres num ficheiro de texto - notas • Escrita - quando se abre um ficheiro para escrita • caso este já exista, o seu conteúdo (anterior) é apagado; • senão (como ainda não existia) o ficheiro é criado. • Em qualquer caso, a abertura de um ficheiro para escrita (ou o acesso a um ficheiro em modo de escrita) gera um ficheiro vazio.
Escrever String em ficheiro de texto – Exemplo 1 import java.io.*; class escreverFicheiro{ publicstaticvoid main(String[] args) throws IOException { • BufferedWriter bw = new BufferedWriter(new FileWriter("escreverString.txt")); • bw.write("Primeiro programa"); • bw.close(); System.out.println("Terminou!"); } } 1. Criar um buffer para o ficheiro “escreverString.txt” 2. O ficheiro é aberto e nele é escrita a String “Primeiro programa” 3. Depois de efectuadas as operações o ficheiro é fechado
Escrever num ficheiro de texto – Exemplo2 import java.io.*; publicclass ex2 { publicstaticvoid main(String [] args) throws IOException { String s, nomeFx= "novo.txt"; BufferedWriter f = null; BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); try { f = new BufferedWriter(new FileWriter(nomeFx)); // abrir o ficheirodetexto } catch(Exception e) {// ocorreuumerronaabertura do ficheiro, logo: System.out.println("Impossível criar o ficheiro " + nomeFx); System.out.println("fim do programa..."); } System.out.println("escrever no ficheiro"); s = in.readLine(); // lerumalinha do teclado while(s.length() > 0) { // terminaquandodigitar <enter> f.write(s); // escrever a linha no ficheiro f.newLine(); // inserirmudançalinha no ficheiro s = in.readLine(); // leroutralinha do teclado } f.close(); // fechar o ficheiro System.out.println("O conteúdo foi armazenado no ficheiro " + nomeFx); } }
Leitura e Escrita de Ficheiros – Exemplo 3 import java.io.*; publicclass exemplorw { publicstaticvoid main(String[] args){ String fxL= "textoLeit.txt"; String fxE="textoEscrita.txt"; try { BufferedReader in = new BufferedReader(new FileReader(fxL)); BufferedWriter out = new BufferedWriter(new FileWriter(fxE)); String str; while((str = in.readLine()) != null){ out.write(str); } in.close(); out.close(); System.out.println("Dados transferidos..."); } catch (IOException e){ System.out.println("Impossível ler o ficheiro"); } } }
Leitura e Escrita de Ficheiros – Exemplo 3 • Neste exemplo são criados dois ficheiros um para leitura (BufferedReader in = new BufferedReader(new FileReader(fxL));) e outro para escrita(BufferedWriter out = new BufferedWriter(new FileWriter(fxE));). • O ficheiro de leitura deve ser previamente criado, senão ocorre o erro de excepção. • Digite no ficheiro o texto ”Leitura e escrita de Ficheiros” • O primeiro ficheiro vai ser percorrido linha a linha e enquanto não encontrar uma linha vazia (while((str = in.readLine()) != null), vai escrever as linhas no segundo ficheiro out.write(str); • Após as operações realizadas os dois ficheiros vão ser fechados