Streams e Ficheiros I/O

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

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

Reader e Writer para streams de caracteres (texto).

Reader e Writer para streams de caracteres (texto).

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

PROGRAMAÇÃO JAVA. Parte 3

Tipos, Literais, Operadores

Tipos, Literais, Operadores

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

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

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

Programação Estruturada e Orientada a Objetos

Manipulação de Arquivos

Palavras Reservadas da Linguagem Java

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

Linguagem de Programação II Implementação

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

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

No final deste curso, saberás criar programas através da linguagem de programação Java.

JAVA. Professor: Bruno Toledo

Sumário. Ficheiros. Ficheiros

Linguagem Java - Introdução

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

Análise de Programação

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

Programação Orientada aos Objectos I

Tipos de dados e comandos POO

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

Seleção Múltipla Laços (while, do-while, for) AULA 05

MsC. João Maria MsC. Liviane Melo

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Módulo 03. Identificadores, Palavras Reservadas, e Tipos

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

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

Programação Orientada a Objetos

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

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

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Familiarização com a ferramenta JavaCC

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Linguagem de Programação III

AULA TEÓRICA 4. Tema 2. Introdução a programação em Java (Continuação) Tema 3. Instruções básicas de entrada e saída

P R O G R A M A. Stream Stream. Stream. Figura 1. Streams representam fluxos unidirecionais de dados, seja em entrada ou saída.

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

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Java Básico. Carga Horária: 32 horas. Pré-requisito: Lógica de Programação; JAVA. Conteúdo Programático

Orientação a Objetos AULA 09

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Programação Orientada a Objetos II Java Segunda aula. Prof. Rogério Albuquerque de Almeida

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

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

Programação Orientada a Objetos

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

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 10 Tema 10. Selecção Instruções de selecção:

Transcrição:

Streams e Ficheiros I/O Capítulo 9

Objectivos Familiarizar com o conceito I/O stream Entender a diferença entre ficheiros binários e de texto. Saber armazenar dados em ficheiros de texto. Saber ler dados de ficheiros texto. Saber usar as classes ObjectOutputStream e ObjectInputStream para ler e guardar objectos em ficheiros binários.

Ficheiros I/O Leitura do Keyboard e escrita no ecrã tratam unicamente dados temporários, que se perdem quando o programa termina. Ficheiros providenciam formas de armazenar e recuperar grandes quantidades de dados. Ficheiros permitem que os dados sejam armazenados permanentemente (ou até que o programa modifique o ficheiro). Ficheiros de leitura podem ser usados várias vezes por programas diferentes.

Como usar ficheiros para I/O? Ficheiros podem ser usados para armazenar: Classes Java Programas Java Output de programas Input de programas. Em Java a leitura e escrita em ficheiros, bem como a leitura do keyboard e a escrita no ecrã é feita através de streams. Uma stream é uma sequência de dados (caracteres, números, etc.). Neste capítulo discute-se programas que usam streams ligados a ficheiros.

O conceito de Stream Um stream é implementado como um objecto. Os dados escritos num output stream são entregues num destino que pode ser um ficheiro ou o ecrã. Os dados que o programa lê de um input stream são recebidos duma fonte que pode ser um ficheiro ou o keyboard. System.out é o único output stream que usamos até agora. Objectos da classe Scanner, usados para o leitura do keyboard, lêem os dados de um input stream.

Ficheiros de texto (text files) e binários (binary files) Todos os dados do ficheiro são armazenados em binário. Ficheiros cujo conteúdo tem que ser tratado como uma sequência binária são denominados ficheiros binários; ficheiros binários só podem ser lidos por máquinas. Por vezes, é mais conveniente pensar em ficheiros como uma sequência de caracteres. Ficheiros de texto podem ser lidos por qualquer pessoa. Streams que nos permitem ver os ficheiros como uma sequência de caracteres são denominados de texto.

Ficheiros de texto e binários Usualmente ficheiros de texto visualizam-se da mesma forma em todos os computadores. Usualmente ficheiros binários diferem de máquina para máquina e de linguagem de programação para linguagem de programação. Normalmente, a plataforma e as linguagens de programação usadas para criar os ficheiros tem que ser usadas para os ler. Contudo, ficheiros binários são mais eficientes que ficheiros de texto. Em Java, ficheiros binários são independentes da plataforma.

Ficheiros de texto e binários Em Java, ficheiros binários podem ser criados numa plataforma de computador e lidos noutra, combinando portabilidade e eficiência. Embora ficheiros de texto possam ser lidos e escritos num editor, e os ficheiros binários tenham que ser lidos e escritos por um programa.

Nomes dos ficheiros As regras das palavras dos nomes dos ficheiros dependem do sistema operativo, não do Java. Tipicamente os sistemas operativos permitem que se use letras, dígitos, e o símbolo do ponto como palavras do nome dos ficheiros. O sufixo.txt indica um ficheiro de texto, mas isto é uma convenção.

Nome dos ficheiros - pathnames Quando se providencia o nome de um ficheiro como argumento para abrir um ficheiro, o nome do ficheiro pode ser usado se o ficheiro estiver na mesma directoria em que o programa está em execução. Tanto pode ser usado o pathname total como o relativo. O pathname total é o pathname que começa na directoria raiz. O relativo é a partir da directoria em que o programa está em execução. O caminho para especificar os pathnames depende do sistema operativo.

Nome dos ficheiros - pathnames Exemplo UNIX - /user/smith/home.work1/data.txt String pathname="/user/smith/home.work1/data.txt"; Exemplo Windows - D:\homework\hw1\data.txt String pathname="d:\\homework\\hw1\\data.txt ; As duplas \\ tem que ser usado no pathname devido ao \ ser um carácter de escape, mas quando o pathname é introduzido pelo teclado só deve ser \. Um programa Java aceita pathname escritos nos dois formatos Windows ou UNIX, mesmo o sistema operativo usado não aceite esse formato: "D:/homework/hw1/data.txt"

Outline: Ficheiros de texto I/O Escrita em ficheiros de texto - PrintWriter Leitura em ficheiros de texto - BufferedReader Classe StringTokenizer Classes FileReader e FileOutputStream

Escrita em ficheiros de texto classe PrintWriter O package java.io contém as definições das classes de I/O em ficheiros apresentadas neste capítulo. A classe PrintWriter é a que vai ser usada para escrita em ficheiros de texto. O método println da classe PrintWriter comportamento idêntico ao método System.out.println. tem

Exemplo: Escrita em ficheiros de texto

Exemplo: Escrita em ficheiros de texto

Classe FileOutputStream Um ficheiro é aberto para escrita usando: new FileOutputStream("out.txt") esta instrução cria um stream, que é um objecto do tipo OutputStream, e liga-o a um ficheiro vazio Se já existe um ficheiro com o nome passado no argumento, todo o seu conteúdo é perdido. Se o nome do ficheiro não existe, é criado um novo ficheiro com o nome passado como argumento. O construtor de FileOutputStream, pode lançar (throw) uma excepção FileNotFoundException, que significa que o ficheiro não foi criado. Um ficheiro é aberto para acrescentar texto no fim usando o construtor com dois parâmetros: new FileOutputStream(FileName, true)

Classe PrintWriter A classe Printwriter tem um construtor com um parâmetro do tipo OutputStream. Para criar o output stream que será usado como argumento do construtor de PrintWriter, usa-se a classe FileOutputStream. Exemplo: PrintWriter nomeoutputstream = new PrintWriter( new FileOutputStream(pathname) ); O construtor de FileOutputStream e não a invocação do construtor PrintWriter pode lançar uma FileNotFoundException. No exemplo anterior o objecto PrintWriter é declarado fora do bloco try. Se for declarado dentro do bloco try, é uma variável local ao bloco.

classe PrintWriter Construtor PrintWriter( OutputStream streamobject ) PrintWriter( String pathname ) Escrever no ficheiro ligado ao stream public final void println(almost_anything) public final void print(almost_anything) Fechar a ligação ao ficheiro public void close() Despejar (flush) o output stream public void flush()

Uso do tostring na escrita em ficheiros de texto Os métodos println e print da classe PrintWriter têm um comportamento idêntico ao System.out.println e System.out.print, respectivamente. Classes tipicamente incluem o método tostring, logo: objoutputstream.println(obj); é equivalente objinputstream.println(obj.tostring());

Uso do tostring na escrita em ficheiros de texto

Uso do tostring na escrita em ficheiros de texto

Fechar os ficheiros de texto Quando um programa termina a escrita ou a leitura de um ficheiro, deve-se fechar o ficheiro. Exemplos objoutputstream.close(); objinputstream.close(); Se o programa não fecha o ficheiro antes do programa terminar, o Java força o seu fecho quando o programa termina, providenciando que o programa termine normalmente. Quanto mais cedo um ficheiro for fechado, menos provável é que seja estragado quando o programa termina anormalmente. Se um programa escreve num ficheiro, tem que fechar o ficheiro antes de o usar para leitura.

Leitura de ficheiros de texto classe BufferedReader A classe BufferedReader é a que se vai usar para leitura de ficheiros de texto. A classe BufferedReader não aceita o nome do ficheiro como argumento do construtor. O construtor da classe BufferedReader aceita um objecto Reader como argumento. A classe FileReader é que recebe o nome de um ficheiro como argumento do construtor e produz um objecto Reader associado a um input stream.

Classe BufferedReader Exemplo BufferedReader objinputstream = new BufferedReader( new FileReader(pathname) ); O construtor de FileReader, e deste modo a invocação do construtor de BufferedReader, pode lançar (throw) FileNotFoundException. Os métodos readline e read são usados para ler do ficheiro.

Exemplo: Ler duas linhas de um ficheiro de texto

Métodos da classe BufferedReader Construtor BufferedReader(Reader readerobject) Criar um stream new BufferedReader( new FileReader(pathname) ) Ler uma linha do ficheiro public String readline() throws IOException Se a operação de leitura for além do fim do ficheiro, retorna null. Fechar a ligação com o ficheiro public void close()

Métodos da classe BufferedReader Ler um carácter do ficheiro e retornar o seu valor int public int read() throws IOException Se a operação de leitura for além do fim do ficheiro, retorna -1. Ler um carácter do ficheiro e tratá-lo como tal é necessário a conversão explicita char next = (char)(inputstream.read()); Ler um número do ficheiro de texto, o número tem que ser lido como uma string e a string tem que ser convertida em número.

Exemplo: Ler o nome do ficheiro

Teste do fim do ficheiro de texto Quando o método readline da classe BufferedReader verifica que a leitura é para além do fim do ficheiro, retorna o valor null. Quando o método read verifica que a leitura é para além do fim do ficheiro, retorna o valor -1.

Teste do fim do ficheiro de texto

Classe StringTokenizer A classe BufferedReader pode ler linhas inteiras ou um simples carácter, mas não palavras. A classe StringTokenizer pode receber uma linha de texto e dividi-la em palavras individuais. A classe StringTokenizer está no package java.util. Uma palavra individual é denominada token. Tokens são sequências de caracteres diferentes de espaços.

Classe StringTokenizer Exemplo StringTokenizer tokenizer = new StringTokenizer("Read my lips!"); while (tokenizer.hasmoretokens(){ System.out.println(tokenizer.nextToken()); Produz Read my lips! Separadores são caracteres espaço a menos que outros sejam especificados. Para especificar o conjunto de caracteres separadores, na construção deve ser dado como segundo argumento uma string com todos os caracteres separadores. Exemplo new StringTokenizer("Read my lips!", " \n.,!");

Métodos da classe StringTokenizer Construtores public StringTokenizer(String thestring) public StringTokenizer(String thestring, String delimiters) Verifica se existem mais tokens? public boolean hasmoretokens() Obter o próximo token public String nexttoken() Obter o número de tokens que faltam obter public int counttokens()

Classes FileReader e FileOutputStream A classe FileReader é usada com a classe BufferedReader; a classe FileOutputStream é usada com a classe Printwriter. A classe FileReader e a classe FileOutputStream aceitam o nome de um ficheiro como argumento do construtor. Associar um objecto BufferedReader com um ficheiro usando uma string com o nome requer dois passos: Primeiro, criar um objecto da classe FileReader. Depois usar esse objecto para criar um objecto da classe BufferedReader. BufferedReader objinputstream = new BufferedReader(new FileReader("story.txt"));

Classes FileOutputStream e Associar um objecto PrintWriter com um ficheiro usando uma string com o nome requer dois passos: Primeiro, criar um objecto da classe FileOutputStream. Depois usar esse objecto para criar um objecto da classe PrintWriter. Exemplo PrintWriter objoutputstream = new PrintWriter PrintWriter (new FileOutputStream("stuff.txt"));

Classe File Os métodos da classe File podem testar propriedades do ficheiro tal como: Se o nome do ficheiro existe? Se o ficheiro se pode ler? Tipicamente, o sistema operativo permite ficheiros que não se podem ler ou que só podem ser lidos por certos utilizadores. A classe File é como uma classe wrapper (empacotadora) para strings que são nomes de ficheiros: new File("data.txt")

Classe File

Métodos da classe File O método exists determina se o nome do ficheiro existe: public boolean exists() O método canread determina se o sistema operativo permite a leitura do ficheiro: public boolean canread() O método canwrite determina se o sistema operativo permite a escrita no ficheiro: public boolean canwrite() Tipicamente, o sistema operativo permite ficheiros que não se podem escrever ou que só podem ser escritos por certos utilizadores. Outros métodos public boolean delete() public long length() public String getname() public String getpath() public boolean isdirectory() public String[] list()

Exemplo: Agenda

Exemplo: classe Data public class Data { protected int dia, mes, ano; public Data( int d, int m, int a ) { dia = d; mes = m; ano = a; public Data( String d ) { StringTokenizer st=new StringTokenizer(d,"/"); dia = Integer.parseInt(st.nextToken()); mes = Integer.parseInt(st.nextToken()); ano = Integer.parseInt(st.nextToken()); public boolean fazanos(data dt) { return dt.dia == dia && dt.mes == mes; public int idade( Data dt ) { int n = dt.ano-ano; return ( mes < dt.mes mes == dt.mes && dia < dt.dia)? n-1 : n;

Exemplo: classe Data public boolean equals( Object o) { if ( o instanceof Data ) { Data dt = (Data) o; return dt.dia == dia && dt.mes == mes && dt.ano == ano; return false; public String tostring() { return dia+ "/" + mes + "/" + ano; public static Data getdata( ) { Calendar c = Calendar.getInstance(); return new Data( c.get(calendar.day_of_month), c.get(calendar.month)+1, c.get(calendar.year) );

Exemplo: classe Entrada public class Entrada { protected String nome; // Nome da pessoa protected String tel; // Telefone protected Data dtnasc; // Data de nascimento protected Data createdata( String d ) { return new Data(d); protected Entrada(String n, String t, Data dn) { nome = n; tel = t; dtnasc= dn; public Entrada(String n, String t, String d) { nome = n; tel = t; dtnasc= createdata(d); public Entrada( String ent ) { StringTokenizer st = new StringTokenizer(ent); nome = st.nexttoken(":"); st.nexttoken(" "); // Consumir os dois pontos tel = st.nexttoken(" "); dtnasc = createdata(st.nexttoken());

Exemplo: classe Entrada public String getnome() { return nome; public String gettelefone() { return tel; public String getdata(){return dtnasc.tostring(); public int getidade(data dt) { return dtnasc.idade(dt); public boolean fazanos(data dt) { return dtnasc.fazanos(dt); public boolean equals( Object o) { if ( o instanceof Entrada ) return nome.equals(((entrada) o).nome); return false; public String tostring() { return getnome() + ": " + gettelefone() + " " + getdata() ;

interface ArrayEntradas public interface ArrayEntradas { int size(); boolean add( Entrada e ); Entrada get( int ind); void set(int ind, Entrada e);

Exemplo: classe Agenda public class Agenda { protected ArrayEntradas telefones; public Agenda(ArrayEntradas array) { telefones = array; public int size() { return telefones.size(); public String getnome( int ind ) { return telefones.get(ind).getnome(); public String gettelefone( int ind ) { return telefones.get(ind).gettelefone(); public String getdata( int ind ) { return telefones.get(ind).getdata(); public int indexof( String nome ) { for (int i= 0; i < telefones.size(); ++i) if (getnome().equals(nome)) return i; return -1; protected void add( Entrada e ) { int ind = indexof(e.getnome()); if (ind == -1) telefones.add( e ); else telefones.set(ind, e);

Exemplo: classe Agenda public void add(string e) { add( new Entrada( e )); public void add(string n, String t, String d) { add( new Entrada(n, t, d)); public void append( Agenda a ) { for (int i= 0; i < a.size(); ++i) add(a.telefones.get(i)); public String aniversarios( ) { Data dt = Data.getData(); Entrada e; StringBuffer str = new StringBuffer(); for (int i = 0; i < telefones.size(); ++i) { e = telefones.get(i); if ( e.fazanos(dt) ) { str.append(e.getnome()); str.append(" faz "); str.append(e.getidade(dt)); str.append(" anos.\n"); return str.tostring(); public String tostring( ) { StringBuffer str = new StringBuffer(); for (int i = 0; i < telefones.size(); ++i) { str.append( telefones.get(i) ); str.append('\n'); return str.tostring();

Exemplo: classe AplAgenda public class AplAgenda { protected Scanner keyboard = new Scanner( System.in ); protected Agenda agd; public AplAgenda( Agenda a ) { agd= a; protected void listar( ) throws FileNotFoundException { System.out.print( agd ); protected void gettelefone( ) { System.out.print("Nome da pessoa? "); String nome = keyboard.nextline(); int ind = agd.indexof(nome); if ( ind!= -1 ) System.out.println( agd.gettelefone(ind) ); else System.out.println( nome + " não consta na agenda" ); protected void acrescentar( ) { System.out.print("Nome? "); String nome = keyboard.nextline(); System.out.print("Telefone? "); String tel = keyboard.next(); keyboard.nextline(); System.out.print("Data de nascimento (dd/mm/aa)? "); String data = keyboard.next(); keyboard.nextline(); try { agd.add(nome, tel, data); catch ( Exception e ) { throw new NumberFormatException("Formato da data inválido");

Exemplo: classe AplAgenda protected void leragenda( ) throws FileNotFoundException, IOException { String filename = Utils.getFilename( "Nome do ficheiro? " ); BufferedReader br = new BufferedReader( new FileReader(filename) ); String line; while( (line = br.readline())!= null ) try { agd.add( line ); catch ( Exception e ) { throw new StreamCorruptedException( "Ficheiro corrompido"); br.close();

Exemplo: classe AplAgenda protected void escrever( String str ) throws FileNotFoundException { PrintWriter pw; String filename = Utils.getFilename("Nome do ficheiro? "); pw = new PrintWriter( new FileOutputStream(filename) ); pw.print( str ); pw.close(); protected void escreveragenda( ) throws FileNotFoundException, IOException { escrever(agd.tostring());

Exemplo: classe AplAgenda protected void escreveragenda( ) throws FileNotFoundException, IOException { escrever(agd.tostring()); protected void aniversarios( ) throws FileNotFoundException { System.out.print("Quer escrever em ficheiro? "); String ans = keyboard.nextline(); ans = ans.tolowercase(); if (ans.equals("sim") ans.equals("s")) escrever(agd.aniversarios()); else System.out.print( agd.aniversarios() );

Exemplo: classe AplAgenda public void run( ) { for (;;) try { System.out.print("Comandos:\n 1 - telefone\n... \n->" ); int numcom = keyboard.nextint(); keyboard.nextline(); switch ( numcom ) { case 1: this.gettelefone(); break; case 2: this.aniversarios(); break; case 3: this.listar(); break; case 4: this.acrescentar(); break; case 5: this.leragenda(); break; case 6: this.escreveragenda(); break; case 7: return; default: System.out.println( "Comando invalido" ); catch ( FileNotFoundException e ) { { System.out.println( "Não é possível abrir o ficheiro"); catch ( StreamCorruptedException e) { System.out.println( "Ficheiro corrompido"); catch ( IOException e ) { System.out.println( "Erro no acesso ao ficheiro"); catch ( NumberFormatException e ) { System.out.println( e.getmessage() );

Leitura de ficheiros e de texto Não se deve ler um ficheiro binário como se fosse um ficheiro de texto (usar ObjectInputStream) ou um ficheiro de texto como se fosse um ficheiro binário (usar BufferedReader). O método tostring pode ser usado na escrita de objectos no ecrã e em ficheiros de texto. Contudo o método tostring não é necessário na escrita ficheiros binários.

Interface Serializable A classe que é Serializable determina como o Java realiza I/O em ficheiros de objectos da classe. Java afecta um número de série em cada objecto da classe que é escrito na stream do tipo ObjectOutputStream. Se o objecto é escrito mais do que uma vez, o Java escreve somente o número de série do objecto. Isto torna I/O em ficheiros mais eficiente e cria ficheiros pequenos.

Interface Serializable Quando da leitura de stream do tipo ObjectInputStream, números de série duplicados são retornadas referencias para o mesmo objecto. Quando uma classe Serializable tem uma variável de instancia do tipo classe, a classe da variável de instancia tem que ser Serializable. É boa prática de programação armazenar dados de um único tipo de classe num ficheiro.

Exemplo: classes Data, Entrada e Agenda import java.io.serializable; public class Data implements Serializable { private static final long serialversionuid = 1L;... public class Entrada implements Serializable { private static final long serialversionuid = 1L;... public class Agenda implements Serializable { private static final long serialversionuid = 1L;...

Exemplo: classe AplAgenda3 public class AplAgenda3 extends AplAgenda { public AplAgenda3( Agenda a ) { super(a); protected void leragenda( ) throws FileNotFoundException, IOException { String filename = Utils.getFilename("Nome do ficheiro? "); ObjectInputStream is = new ObjectInputStream( new FileInputStream(filename) ); try { Agenda a = (Agenda) is.readobject(); agd.append( a ); catch ( ClassCastException e ) { throw new StreamCorruptedException("Ficheiro corrumpido"); catch ( ClassNotFoundException e ) { throw new StreamCorruptedException("Ficheiro corrumpido"); is.close(); protected void escreveragenda( ) throws FileNotFoundException, IOException { String filename = Utils.getFilename( "Nome do ficheiro? " ); ObjectOutputStream os = new ObjectOutputStream( new FileOutputStream(filename)); os.writeobject( agd ); os.close();

Array de objectos em ficheiros binários Um array pode ser armazenado num ficheiro binário usando writeobject, e pode ser lido posteriormente usando readobject. Se o tipo base do array é do tipo classe, a classe tem que ser Serializable. Todos os dados do array podem ser escritos no ficheiro binário usando uma única invocação a writeobject.

Exemplo: Array de objectos em ficheiros binários (escrita)

Exemplo: Array de objectos em ficheiros binários (leitura)

Exemplo: Array de objectos em ficheiros binários

Sumário Começaram a familiarizar-se com o conceito de I/O stream. Entenderam a diferença ente ficheiros binários e ficheiros de texto. Aprenderam a armazenar dados em ficheiros. Aprenderam como ler os dados de ficheiros. Aprenderam como se usa as classes ObjectOutputStream e ObjectInputStream para ler e escrever objectos de ficheiros binários.