InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

Documentos relacionados
Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Reader e Writer para streams de caracteres (texto).

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Reader e Writer para streams de caracteres (texto).

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Objetivos deste capítulo

Gravação de objetos em arquivos

Programação Java. Entrada & Saída

Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams

Hierarquia de classes. Veja as diversas classes do pacote

Programação de Computadores II TCC /Turma A 1

Notas de POO: interfaces, excepções e input/output

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

Streams e Ficheiros I/O

Array de objectos Array de objectos Criação Exemplo:

Programação de Computadores II TCC Profs.: Anselmo Montenegro (1) & Marcos Lage (2) (1) (2)

Unidade VIII Persistência de Dados em Java

Manipulação de arquivos. João Paulo Q. dos Santos

Arquivos continuação. Profa. Thienne Johnson EACH/USP

GUIA DE UTILIZAÇÃO DE MOTOR DE SCRIPTING SOFIA2. Versão 4

AULA TEÓRICA 4. Tema 5. Ficheiros. Ficheiro do tipo texto. Ficheiros de Objectos. Ø Classe File Ø Criação. Manipulação. Ø Classe StringTokenizer

Laboratório de Programação

Manipulando Arquivos em Java

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

20/10/15. Arquivos e fluxos. Arquivos. Plataformas e sistemas de arquivo. A classe java.io.file. Modo de operação. Fluxos, leitores e escritores

Programação Orientada a Objetos

Java Standard Edition (JSE)

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

PROGRAMAÇÃO JAVA. Parte 3

10 Arquivos e fluxos. Desenvolvimento OO com Java. Vítor E. Silva Souza

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

Caracterizando o Consumo de Energia de APIs de E/S da Linguagem Java

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Manipulação de Arquivos

Universidade Federal de Pelotas Bacharelado em Ciência da Computação Programação Orientada a Objetos Prof. Gerson Cavalheiro 1/6

Projeto V (U900005) Ciências da Computação Projeto II (U900003) Engenharia da Computação Prof. Valdir Gil Pillat

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Coleções POO. Prof. Marcio Delamaro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação II Java Streams. Christopher Burrows

Prof. MsC Vicente Paulo de Camargo PUCGO. Conteúdo baseado no livro Lógica de programação e estrutura de dados - Java - Sandra Puga

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

Aula 11 POO 1 Coleções e Arquivos. Profa. Elaine Faria UFU

Análise de Programação

Input / Output na linguagem java. Para isso usamos um dos construtores da classe java.io.file:

9 Classes Abstractas e Interfaces

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Tratamento de Erros com Excepções

Curso Superior de Tecnologia emtelemática Programação Orientada a Objetos Streams em Java. Copyright 2010 Prof. César Rocha

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Java - Arquivos. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Linguagem de programação Arquivos e tratamento de erros

Linguagem de Programação II Implementação

21/05/2013. Informações Complexas. Arquivos de Texto e Arquivos Binários. Hierarquia de Dados. Armazena Informação. Classificação de Arquivos

Aula teórica 4. Tema 3. Linguagem de Programação Java. Manipulação de informação simples (cont.)

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Streams. Streams. Tipos: Utilizac~ao:

Streams. Profa. Patrícia A. Jaques Unisinos

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Instituto Superior de Engenharia de Lisboa

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Implementação de Protocolos Criptográficos. Manuel DI Universidade do Minho Setembro de

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Vetores Unimensionais

Simulado de Linguagem de Programação Java

Programação Orientada por Objectos 2007/2008

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Sumário. Ficheiros. Ficheiros

Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão. Ler e escrever bytes, caracteres e Strings de/para arquivos

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

LSD LSD PICC. Manuela Sousa

Java - Introdução à Linguagem

Tipos de dados e comandos POO

CETEC Centro Paula Souza

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Genéricos. Profa. Thienne Johnson EACH/USP

ESQUEMA AULA PRÁTICA 1

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Linguagens de Programação Conceitos e Técnicas. Variáveis e Constantes

Palavras Reservadas da Linguagem Java

ESQUEMA AULA PRÁTICA 1

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Orientação a Objetos e Java

Transcrição:

Input e Output 8 Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo físico concreto. Todas as classes que implementam streams em Java são subclasses das classes abstractas InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto). Subclasses de InputStream e de Reader são fontes de dados Subclasses de OutputStream e de Writer são destinos de dados Uma stream é uma sequência de items de dados, geralmente bytes de 8 bits. Hierarquia de classes

OutpuStream ByteArrayOutputStream FileOutpuStream FilterOutputStream BufferedOutputStream DataOutputStream PipedOutputStream ObjectOutputStream Input e Output 9 InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream PipedInputStream ObjectInputStream Writer BufferedWriter LineNumberWriter PrintWriter OutputStreamWriter FileWriter PipedWriter StringWriter CharArrayWriter Reader BufferedReader LineNumberReader InputStreamReader FileReader PipedReader StringReader CharArrayReader

Input e Output 10 Input / Output de baixo nível Para ler ou escrever num ficheiro temos de criar um objecto do tipo stream que depois é associado a um objecto do tipo File. As classes FileInputStream e FileOutputStream definem objectos do tipo stream que nos permitem ler / escrever sequências de bytes em ficheiros. Exemplo: import java.io.*; public class Um { public static void main(string []args){ // criar o objecto do tipo File, ficheiro: File ficheiro = new File( "teste.dat" ); try { // associar um objecto do tipo FileOutputStream a um ficheiro FileOutputStream os = new FileOutputStream ( ficheiro);

Input e Output 11 // try {... byte [] arraybytes = { 10, 20, 30, 40, 50, 60, 70, 80 ; // escrever um array de bytes no ficheiro os.write( arraybytes); // depois de concluir a escrita, devemos fechar a stream * os.close(); // os métodos de acesso a ficheiros lançam excepções do // tipo IOException catch (IOException e){ System.out.println (e.getmessage()); * Os dados são previamente escritos em memória principal, num buffer de memória temporário (cache). Quando o buffer fica cheio, são copiados para o disco. Se quando o programa termina o buffer não foi fechado, podem perder-se dados que ainda não foram copiados para disco.

Input e Output 12 Para ler os dados do ficheiro usamos o método read da classe FileInputStream import java.io.*; public class dois { public static void main(string []args){ File ficheiro = new File( "teste.dat" ); // podemos saber o tamanho do ficheiro int tamanhoficheiro = (int)ficheiro.length(); byte [] arraybytes = new byte [tamanhoficheiro]; try { // criamos um objecto do tipo FileInputStream que associamos ao ficheiro FileInputStream is = new FileInputStream ( ficheiro ); // ler os dados arraybytes = is.read (); for (int i=0; i<tamanhoficheiro; i++){ System.out.println( arraybytes[i]); is.close()...

Input e Output 13 Input / Output de alto nível A classe DataOutputStream permite-nos fazer o output de tipos primitivos de dados, convertendo-os em sequências de bytes. Esta classe fornece um acesso de mais alto nível para aceder a um ficheiro. Não está ligada directamente a um objecto do tipo file mas sim a um objecto do tipo FileOutputStream. File ficheiro = new File("teste2.dat"); FileOutputStream os = new FileOutputStream( ficheiro); DataOutputStream dataos = new DataOutputStream(os ); writefloat writeint writedouble <= métodos da classe DataOutputStream dataos os ficheiro os tipos primitivos são convertidos em sequências de bytes os bytes são escritos no ficheiro

Input e Output 14 Exemplo: File ficheiro = new File("teste2.dat"); try { FileOutputStream os = new FileOutputStream( ficheiro); DataOutputStream dataos = new DataOutputStream(os ); dataos.writeint ( 123456789); dataos.writelong(123456l); dataos.writefloat(777.3f); dataos.writedouble(88888888.9d); dataos.writechar('a'); dataos.writeboolean (false); dataos.close(); catch (IOException e){ System.out.println(e.getMessage());

Input e Output 15 Para ler, revertemos o processo, usando as classes FileInputStream e DataInputStream: Os dados terão que ser lidos pela mesma ordem porque foram escritos. File ficheiro = new File("teste2.dat"); FileInputStream is = new FileInputStream( ficheiro); DataInputStream datais = new DataInputStream( is ); readfloat readint readdouble <= métodos da classe DataInputStream datais iss ficheiro a sequências de bytes é convertida em valores de tipos primitivos os bytes são lidos do ficheiro

Input e Output 16... File ficheiro = new File("teste2.dat"); try { FileInputStream is = new FileInputStream( ficheiro); DataInputStream datais = new DataInputStream( is ); System.out.println(dataIS.readInt ()); System.out.println(dataIS.readLong()); System.out.println(dataIS.readFloat()); System.out.println(dataIS.readDouble()); System.out.println(dataIS.readChar()); System.out.println(dataIS.readBoolean ()); datais.close(); catch (IOException e){ System.out.println(e.getMessage()); - a ordem de leitura tem de corresponder à ordem de escrita

Input e Output 17 Ficheiros de Texto Os dados podem ser armazenados em formato ASCII Para gerar um ficheiro de texto podemos usar um objecto da classe PrintWriter A classe tem dois métodos de output, void print (...) void println (...) podendo ser o argumento um valor de qualquer um dos tipos primitivos. Os métodos convertem o valor do argumento numa string e fazem o seu output. O construtor da classe PrintWriter recebe uma stream de output. Exemplo: File ficheiro = new File("teste3.dat"); try { FileOutputStream os = new FileOutputStream( ficheiro); PrintWriter pw = new PrintWriter( os );

Input e Output 18 // escrever um int pw.println ( 123456789); pw.println(123456l); um long pw.println(777.3f); // um float pw.println(88888888.9d); // um double pw.println('a'); // um char pw.println (false); // um boolean pw.close();.. Ler um ficheiro de texto Usamos as classes FileReader e BufferedReader Exemplo: File ficheiro = new File("teste3.dat"); try { FileReader fr = new FileReader( ficheiro); BufferedReader br = new BufferedReader(fr);

Input e Output 19... String linha; linha = br.readline(); int i = Integer.parseInt ( linha); // se for só para escrever não é necessário converter System.out.println(i); linha = br.readline(); long l = Long.parseLong (linha); linha = br.readline(); float f = Float.parseFloat ( linha); linha = br.readline(); double d = Double.parseDouble ( linha); linha = br.readline(); char c = linha.charat(0); linha = br.readline(); boolean b = Boolean.getBoolean(linha); br.close();...

Input e Output 20 Input / Output de objectos Podemos também ler / escrever objectos de / num ficheiro, usando as classes ObjectInputStream e ObjectOutputStream Uma ObjectOutputStream permite armazenar objectos através do método writeobject() que implementa um algoritmo de serialização que garante que todas as referências cruzadas existentes entre instâncias de diferentes classes serão repostas aquando do processo de leitura dessas mesmas instâncias. Para que se possam gravar instâncias de uma determinada classe numa ObjectOutputStream é necessário que a classe implemente a interface Serializable. Além disso, todas as variáveis dessa classe terão que ser também serializáveis. Isto significa que todas as variáveis de instância da classe devem por sua vez pertencer a classes serializáveis. Os tipos simples são por definição serializáveis, assim como o são os arrays e as instâncias das classes String e Vector.

Input e Output 21 Suponhamos a classe C7: public class C7 implements Serializable { private int n; private String nome; public C7(int n, String nome) {... public void setnumero (int i) {... public void setnome (String n) {... public int getnumero() {... public String getnome() {... public String tostring (){ return (n+" "+nome + "\n");

Input e Output 22 Para gravar objectos: - criamos uma ObjectOutputStream: File f = new File ("teste4.dat"); FileOutputStream os = new FileOutputStream (f); ObjectOutputStream oos = new ObjectOutputStream(os); Para escrever um objecto do tipo C7: - criamos o objecto C7 o1 = new C7 (1, XPTO ); - usamos o método void writeobject(object) oos.writeobject( o1 ); Obs. Diferentes tipos de objectos podem ser escritos no mesmo ficheiro.

Input e Output 23 Exemplo:... int i; C7 objectoc7; File f = new File ("teste4.dat"); try { FileOutputStream os = new FileOutputStream (f); ObjectOutputStream oos = new ObjectOutputStream(os); for (i=0; i<100; i++){ objectoc7 = new C7( i, "XPTO da Silva"); oos.writeobject( objectoc7 ); oos.close(); catch (IOException e){ System.out.println(e.getMessage());

Input e Output 24 Para ler objectos, usamos as classes FileInputStream e ObjectInputStream... int i; C7 objectoc7; File f = new File ("teste4.dat"); try { FileInputStream is = new FileInputStream (f); ObjectInputStream ois = new for (i=0; i<100; i++){ // lemos o objecto com o método //Object readobject(void); ObjectInputStream(is); objectoc7 = (C7) ois.readobject(); //* // * temos de converter para o tipo do objecto a ler System.out.println ( objectoc7.tostring() ) ; ois.close();

Input e Output 25... catch (IOException e){ System.out.println(e.getMessage()); // o método readobject, além da excepção anterior, pode // também gerar uma instância de ClassNotFounfException catch (ClassNotFoundException e){ System.out.println("Classe não existente - " + e.getmessage());