Linguagens de Programação

Preview:

DESCRIPTION

Linguagens de Programação. Fluxo de Dados: Entrada e Saída. Um Pacotes para E/S. O pacote java.io fornece um grande número de classes para tratar entrada e saída de dados transferência de dados do programa para fontes externas e vice-versa - PowerPoint PPT Presentation

Citation preview

Linguagens de ProgramaçãoLinguagens de Programação

Fluxo de Dados:Fluxo de Dados:

Entrada e SaídaEntrada e Saída

2

Um Pacotes para E/SUm Pacotes para E/S

O pacote O pacote java.io fornece um grande número fornece um grande número de classes para tratar entrada e saída de de classes para tratar entrada e saída de dadosdados transferência de dados do programa para fontes transferência de dados do programa para fontes

externas e vice-versaexternas e vice-versa entrada e saída de dados envolve o uso de fluxos entrada e saída de dados envolve o uso de fluxos

((streamsstreams))

3

Um Pacotes para E/SUm Pacotes para E/S

Dados sendo enviados para um programaDados sendo enviados para um programa

Dados sendo enviados por um programaDados sendo enviados por um programa

4

Fluxo de InformaçõesFluxo de Informações

Sequência de bytes que fluem para Sequência de bytes que fluem para dentro ou para fora do programadentro ou para fora do programa

5

Copiando arquivos (Copiando arquivos (P1P1)–byte streams)–byte streams

FileInputStream in = FileInputStream in = nullnull;; FileOutputStream out = FileOutputStream out = nullnull;; trytry { { in = in = newnew FileInputStream("ensinamento.txt"); //http://www.cin.ufpe.br/~maod/lpoo/ensinamento.txt FileInputStream("ensinamento.txt"); //http://www.cin.ufpe.br/~maod/lpoo/ensinamento.txt out = out = newnew FileOutputStream("outroarquivo.txt"); FileOutputStream("outroarquivo.txt"); intint c; c;

whilewhile ((c = in.read()) != -1) { ((c = in.read()) != -1) { out.write(c);out.write(c); }}

} } finallyfinally { { ifif (in != (in != nullnull) {) { in.close();in.close(); }} ifif (out != (out != nullnull) {) { out.close();out.close(); }} }}

6

Copiando arquivosCopiando arquivos

Notar que:Notar que: read() retorna um valor inteiroread() retorna um valor inteiro É importante para identificar o fim de É importante para identificar o fim de arquivo = “-1”arquivo = “-1”

Sempre feche as streamsSempre feche as streams Byte streams devem ser usados apenas Byte streams devem ser usados apenas com entrada/saída de dados primitivoscom entrada/saída de dados primitivos

7

StreamsStreams

Um Um streamstream é uma abstração de um fluxo é uma abstração de um fluxo contínuo de dados em uma única direçãocontínuo de dados em uma única direção

As classes que manipulam streams podem As classes que manipulam streams podem ser agrupadas em dois tipos:ser agrupadas em dois tipos: byte streamsbyte streams

classes InputStream e OutputStreamclasses InputStream e OutputStream

character streamscharacter streamsclasses Reader e Writerclasses Reader e Writer

8

Character streamsCharacter streams

Quando a internacionalização é a prioridadeQuando a internacionalização é a prioridade Faz as adaptações automaticamenteFaz as adaptações automaticamente Classes usadas:Classes usadas:

ReaderReader WriterWriter FileReaderFileReader FileWriterFileWriter

9

Copiando (Copiando (P2P2)–character streams)–character streams

FileReader inputStream = null; FileReader inputStream = null; FileWriter outputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader(“amizade.txt"); try { inputStream = new FileReader(“amizade.txt");

outputStream = new FileWriter(“outroarquivo2.txt"); outputStream = new FileWriter(“outroarquivo2.txt"); int c; int c; while ((c = inputStream.read()) != -1) while ((c = inputStream.read()) != -1) { outputStream.write(c); } } { outputStream.write(c); } } finally { if (inputStream != null) finally { if (inputStream != null)

{ inputStream.close(); } { inputStream.close(); } if (outputStream != null) if (outputStream != null)

{ outputStream.close(); }{ outputStream.close(); }} } } } } }

10

Line-oriented I/OLine-oriented I/O

I/O de caracteres ocorrem em grandes quantidadesI/O de caracteres ocorrem em grandes quantidades I/O orientada a linha de caracteres permite ler uma I/O orientada a linha de caracteres permite ler uma

sequência de caracteres terminada por:sequência de caracteres terminada por: carriage-return/line-feed sequence(“\r\n”)carriage-return/line-feed sequence(“\r\n”) carriage-return(“\r”)carriage-return(“\r”) line-feed(“\n”)line-feed(“\n”)

Classes usadasClasses usadas BufferredReader and PrintWriterBufferredReader and PrintWriter

11

Line-oriented I/O – (Line-oriented I/O – (P3P3)) FileReader inputStream = FileReader inputStream = nullnull;; FileWriter outputStream = FileWriter outputStream = nullnull;;

trytry { { inputStream = inputStream = newnew FileReader("amor.txt"); FileReader("amor.txt"); outputStream = outputStream = newnew FileWriter("arquivo.txt"); FileWriter("arquivo.txt");

intint c; c; whilewhile ((c = inputStream.read()) != -1) { ((c = inputStream.read()) != -1) { outputStream.write(c);outputStream.write(c); }} }}

12

ExercícioExercício

Seja o seguinte registro:Seja o seguinte registro: nome, idade, sexo, estadoCivil;nome, idade, sexo, estadoCivil;

Utilizar a entrada/saída de streams de caracteres Utilizar a entrada/saída de streams de caracteres para criar um programa para gravar em um arquivo para criar um programa para gravar em um arquivo os dados formatados do registro acima;os dados formatados do registro acima;

Utilizar a entrada/saída de streams de caracteres Utilizar a entrada/saída de streams de caracteres para criar um programa para ler de um arquivo os para criar um programa para ler de um arquivo os dados formatados gravados em um arquivo;dados formatados gravados em um arquivo;

13

A classe ScannerA classe Scanner

Objetos da classe Scanner são úteis para formatar Objetos da classe Scanner são úteis para formatar entradas separando os campos em “white spaces”entradas separando os campos em “white spaces” '\u0009' HORIZONTAL TABULATION. '\u0009' HORIZONTAL TABULATION. '\u000A', LINE FEED.'\u000A', LINE FEED. '\u000B', VERTICAL TABULATION. '\u000B', VERTICAL TABULATION. '\u000C', FORM FEED. '\u000C', FORM FEED. '\u000D', CARRIAGE RETURN. '\u000D', CARRIAGE RETURN.

Usando outro delimitadorUsando outro delimitador s.useDelimiter(",\\s*");s.useDelimiter(",\\s*");

14

A classe ScannerA classe Scanner Scanner s = Scanner s = nullnull;; trytry { { s = s = newnew Scanner( Scanner(newnew BufferedReader( BufferedReader(new new

FileReader("ausencia.txt")));FileReader("ausencia.txt"))); // s.useDelimiter(",\\s*");// s.useDelimiter(",\\s*"); whilewhile (s.hasNext()) { (s.hasNext()) { System.System.outout.println(s.next());.println(s.next()); }} } } finallyfinally { { ifif (s != (s != nullnull) {) { s.close();s.close(); }} }}