Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações...

21
Entrada e Saída Exercício Linguagem Java Adenilso da Silva Simão 01/09/05 Adenilso da Silva Simão Linguagem Java

Transcript of Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações...

Page 1: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

Linguagem Java

Adenilso da Silva Simão

01/09/05

Adenilso da Silva Simão Linguagem Java

Page 2: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Introdução

I Onde conseguir informações sobre os pacotes:

I http://java.sun.com/j2se/1.5.0/docs/api/

I Tutorial

I http://java.sun.com/docs/books/tutorial/essential/io/overview.html

Adenilso da Silva Simão Linguagem Java

Page 3: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Introdução (II)

I Tanto a entrada quanto a saída são consideradas fluxos

Adenilso da Silva Simão Linguagem Java

Page 4: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Introdução (III)

I Para cada fonte de entrada, deve-se designar um fluxoI TecladoI ArquivoI ModemI Rede

I O mesmo vale para a saída

Adenilso da Silva Simão Linguagem Java

Page 5: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Introdução (IV)

I Em java, existem duas categorias de fluxosI Fluxos de caracteres

I Lida com caracteres unicode 16 bitsI Fluxos de bytes

I Lida com bytes de 8 bits

Adenilso da Silva Simão Linguagem Java

Page 6: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Fluxos de Caracteres

I A maioria dos aplicativos usam informações textuaisI Fluxos de caracteres são mais adequados

I UnicodeI Super tabela de caracteres

I Duas classes básicasI Reader

I Ler informaçõesI Writer

I Escrever informações

Adenilso da Silva Simão Linguagem Java

Page 7: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

ReadersI Existem vários tipos de Readers

I Alguns simplesmente usam a fonte de dadosI Aparecem em cinza

I Alguns fornecem algum processamentoI Aparecem em branco

I

Adenilso da Silva Simão Linguagem Java

Page 8: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

WritersI De forma análoga, existem diversos tipos de Writers

I Observe que nome da OutputStreamWriter está trocado porengano

Adenilso da Silva Simão Linguagem Java

Page 9: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

ExemplosI Vamos criar uma classe que escreve em um arquivo

1 import java . i o .∗ ;

23 class UmaClasse {

4 publ ic void f ( S t r i n g f i lename ) {

5 F i l e W r i t e r fw ;

6 t r y {

7 fw = new F i l e W r i t e r ( f i lename ) ;

8 fw . w r i t e ( "Nao t i n h a medo o t a l Joao de Santo C r i s t o \ n " ) ;

9 fw . w r i t e ( " Era o que todos diz iam quando ele se perdeu \ n " ) ;

10 fw . w r i t e ( " Deixou pra t r a s todo o marasmo da fazenda \ n " ) ;

11 fw . c lose ( ) ;

12 }

13 catch ( IOExcept ion e ) {

14 System . e r r . p r i n t l n ( " Arquivo nao encontrado ! ! " ) ;

15 }

16 }

17 }

Adenilso da Silva Simão Linguagem Java

Page 10: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (II)

I Para usar o println?I Use um PrintWriter1 import java . i o .∗ ;

23 class UmaClasse {

4 publ ic void f ( S t r i n g f i lename ) {

5 P r i n t W r i t e r fw ;

6 t r y {

7 fw = new P r i n t W r i t e r (new F i l e W r i t e r ( f i lename ) ) ;

8 fw . p r i n t l n ( 5 ) ;

9 fw . c lose ( ) ;

10 }

11 catch ( IOExcept ion e ) {

12 System . e r r . p r i n t l n ( " Arquivo nao encontrado ! ! " ) ;

13 }

14 }

15 }

Adenilso da Silva Simão Linguagem Java

Page 11: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (III)

I Para escrever na saída padrão?

1 import java . i o .∗ ;

23 class UmaClasse {

4 publ ic void f ( ) {

5 System . out . p r i n t l n ( "Nao t i n h a medo o t a l Joao de Santo C r i s t o " ) ;

6 System . out . p r i n t l n ( " Era o que todos diz iam quando ele se perdeu " ) ;

7 System . out . p r i n t l n ( " Deixou pra t r a s todo o marasmo da fazenda " ) ;

8 }

9 }

Adenilso da Silva Simão Linguagem Java

Page 12: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (IV)

I Uma f mais genérica

1 import java . i o .∗ ;

23 class UmaClasse {

4 publ ic void f ( Wr i t e r fw ) {

5 t r y {

6 fw . w r i t e ( "Nao t i n h a medo o t a l Joao de Santo C r i s t o \ n " ) ;

7 fw . w r i t e ( " Era o que todos diz iam quando ele se perdeu \ n " ) ;

8 fw . w r i t e ( " Deixou pra t r a s todo o marasmo da fazenda \ n " ) ;

9 fw . f l u s h ( ) ;

10 }

11 catch ( IOExcept ion e ) {

12 System . e r r . p r i n t l n ( " Problemas ao escrever ! ! " ) ;

13 }

14 }

Adenilso da Silva Simão Linguagem Java

Page 13: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (V)

I Usando f para escrever na saída padrão

1 OutputStreamWriter osw =2 new OutputStreamWriter ( System . out ) ;3 f ( osw ) ;

Adenilso da Silva Simão Linguagem Java

Page 14: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (VI)

I Usando f para escrever em uma arquivo

1 F i l e W r i t e r fw = new F i l e W r i t e r ( " data . dat " ) ;2 f ( fw ) ;

Adenilso da Silva Simão Linguagem Java

Page 15: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (VII)

I Usando f para escrever em uma string

1 S t r i n g W r i t e r sw = new S t r i n g W r i t e r ( ) ;2 f ( sw ) ;3 S t r i n g s t r = sw . t o S t r i n g ( ) ;

Adenilso da Silva Simão Linguagem Java

Page 16: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (VIII)I Como ler de um fluxo?1 import java . i o .∗ ;

23 class UmaClasse {

4 void f ( ) {

5 Fi leReader f r = nu l l ;

6 t r y {

7 f r = new Fi leReader ( " data . dat " ) ;

8 i n t r ;

9 while ( ( r = f r . read ( ) ) != −1) {

10 / / Faz algo com o carac te r !

11 }

12 }

13 catch ( IOExcept ion e ) {

14 / / T ra ta r a excecao !

15 }

16 }

17 }

Adenilso da Silva Simão Linguagem Java

Page 17: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Exemplos (IX)I Como ler uma linha inteira?

I BufferedReader1 import java . i o .∗ ;

23 class UmaClasse {

4 publ ic s t a t i c void main ( S t r i n g args [ ] ) {

5 BufferedReader br = nu l l ;

6 t r y {

7 br = new BufferedReader (new Fi leReader ( " data . dat " ) ) ;

8 S t r i n g l i n e ;

9 while ( ( l i n e = br . readLine ( ) ) != nu l l ) {

10 System . out . p r i n t l n ( l i n e ) ;

11 }

12 }

13 catch ( IOExcept ion e ) {

14 System . e r r . p r i n t l n ( e ) ;

15 }

16 }

17 }

Adenilso da Silva Simão Linguagem Java

Page 18: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

IntroduçãoFluxos de CaracteresReadersWritersExemplosFluxo de bytes

Fluxo de bytes

I Conceitos similares se aplicam aos fluxos de bytesI InputStreamI OutputStream

Adenilso da Silva Simão Linguagem Java

Page 19: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

Cópia de FluxosLista de Arquivos

Cópia de Fluxos

I Defina um método que copia o conteúdo de um fluxo decaracteres para outro

I Deve ser usado da seguinte forma

1 streamCopy ( r , w ) ;

I Sendo que r é um Reader e w é um Writer

Adenilso da Silva Simão Linguagem Java

Page 20: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

Cópia de FluxosLista de Arquivos

Lista de Arquivos

I Crie um tipo de fluxo de entrada que é construído com um arrayde strings

I Cada string é o nome de um arquivoI Quando for solicitado, o fluxo deve ler os caracteres dos arquivos

da lista, na ordem que aparecem

Adenilso da Silva Simão Linguagem Java

Page 21: Linguagem Java - lcad.icmc.usp.brjbatista/sce537/mat/arquivos.pdfI Writer I Escrever informações Adenilso da Silva Simão Linguagem Java. Entrada e Saída Exercício ... 4 public

Entrada e SaídaExercício

Cópia de FluxosLista de Arquivos

Lista de Arquivos (II)

I Exemplo de uso

1 S t r i n g f i lenames [ ] = { " data1 . dat " , " data2 . dat " ,2 " data3 . dat " } ;34 MyFi leLis tReader m f l r = new MyFi leLis tReader ( f i lenames ) ;5 t r y {6 i n t r ;7 while ( ( r = m f l r . read ( ) ) != −1) {8 / / Faca alguma coisa9 }10 }11 catch ( IOExcept ion e ) {12 / / T ra ta r a excecao ! !13 }

Adenilso da Silva Simão Linguagem Java