Desenvolvimento Orientado a Objetos com Java



Documentos relacionados
Arquivos. Profa. Thienne Johnson EACH/USP

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

Programação Orientada a Objetos com Java. Prof. Júlio Machado julio.machado@pucrs.br

Java 2 Standard Edition. Entrada. Helder da Rocha

Módulo VIII Linguagem Java Entrada e Saída de Dados Arquivos

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

Capítulo 6. Java IO - Ficheiros

Programação II Java Streams. Christopher Burrows

STREAMS (FLUXOS) EM JAVA uma Introdução

Roteiro. Introdução a Arquivos. Streams Serialização Arquivos de Acesso Randômico Exercícios. Armazenamento. Dados em vetores, listas e variáveis

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

Programação por Objectos. Java

Em JAVA, todas as considerações (ou quase todas) que se relacionam com as mais

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

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.

Ficheiros. Ficheiros - Motivação. Streams. Entrada Binária. Não. Ficheiro

Modulo II Tópicos em Java - IO

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

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

Exercícios de Revisão Java Básico

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Cliente-servidor com Sockets TCP

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

LP2 Laboratório de Programação 2 Ciência da Computação. Arquivos

INF1013 MODELAGEM DE SOFTWARE

Programação de Computadores - I. Profª Beatriz Profº Israel

Java : Comunicação Cliente-Servidor.

Mecanismos de Comunicação. Sockets em java (

2 Orientação a objetos na prática

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

Capítulo 5 Reuso de Classes

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Programação com sockets (em Java)

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Objetivo do programa: Implementação de um analisador de Logs do Servidor Web com base nos requisitos da unidade curricular de Estatística.

UNIVERSIDADE FEDERAL DO PARANÁ. CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o.

Capítulo II Modelos de Programação Distribuída

Arquivos. Estruturas de Dados II Vanessa Braganholo

Programação de Redes de Computadores em Java

UNIVERSIDADE FEDERAL DO PARANÁ

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

BC0505 Processamento da Informação

Caso 1 NetScanner Main

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Java. Marcio de Carvalho Victorino

FTP FILE F TRANSFER PROTOCOL. Tópicos

Threads e Sockets em Java. Threads em Java. Programas e Processos

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Redes de Computadores /1

Bruce Eckel, Thinking in Java, 4th edition, PrenticeHall, New Jersey, cf. José Valente de Oliveira 16-1

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Configuração de Cliente de Web Service HTTPS

Aula 30 - Sockets em Java

JPA: Persistência padronizada em Java

Aula 2 APIs Básicas de Java

SISTEMAS DISTRIBUÍDOS

Arquitetura de Computadores para. Sistemas Operacionais. Sistemas Operacionais. Sumário

CURSO DE PROGRAMAÇÃO EM JAVA

Sistemas Distribuídos

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

Trabalho Prático Nº1 Introdução ao C#.NET

Programação por Objectos. Java

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

THREADS EM JAVA. George Gomes Cabral

Escola Superior de Gestão e Tecnologia. Tratamento de Exceções

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

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

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Introdução a Java. Hélder Nunes

Java 2 Standard Edition Como criar classes e objetos


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

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Estruturas de Dados. Profa. Juliana Pinheiro Campos

A Linguagem Java. Alberto Costa Neto DComp - UFS

Sockets. Introdução. Introdução. Programando para redes em Java. mecanismo de alto nível para acessar recursos na Internet.

Profa. Thienne Johnson

Armazenamento Secundário. SCE-183 Algoritmos e Estruturas de Dados II

Programação Avançada em Java. Patrícia Augustin Jaques

insfcanceof new public switch transient while byte continue extends for int null

PROG. DE COMPUTADORES II SI Arquivos

Introdução a Java. Mário Meireles Teixeira. l Java é tanto uma linguagem de programação de alto nível quanto uma plataforma de desenvolvimento

Hadoop - HDFS. Universidade Federal de Goiás Ciência da Computação

Transcrição:

Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. Desenvolvimento Orientado a Objetos com Java Capítulo 10 Arquivos e Streams

Licença para uso e distribuição Este material está disponível para uso nãocomercial e pode ser derivado e/ou distribuído, desde que utilizando uma licença equivalente. Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença, versão 2.5 http://creativecommons.org/licenses/by-nc-sa/2.5/deed.pt Você pode copiar, distribuir, exibir e executar a obra, além de criar obras derivadas, sob as seguintes condições: (a) você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante; (b) você não pode utilizar esta obra com finalidades comerciais; (c) Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. 2

Objetivos deste capítulo Mostrar como Java lida com arquivos e fluxos de dados; Apresentar as classes que permitem leitura e escrita em diversas fontes de dados; Explicar o que é serialização e como funciona. 3

Armazenamento persistente Poucas aplicações são funcionais apenas com dados transientes; A grande maioria precisa armazenar informações em mídia de longa duração para recuperá-las tempos depois; Java trabalha com fluxos de dados, representando acesso a fontes como: Memória; Arquivos; Rede; Etc. 4

Plataformas e sistemas de arquivo Diferentes sistemas operacionais representam arquivos e trilhas (paths) de diferentes formas: C:\Documents and Settings\User\Arquivo.txt; /home/user/arquivo.txt. Java utiliza a classe java.io.file, abstraindo esta representação e provendo portabilidade. // No Windows: File f = new File("C:\\pasta\\arq.txt"); // No Linux/Unix: File f = new File("/pasta/arq.txt"); 5

A classe java.io.file Pode representar arquivos ou diretórios: File a1 = new File("arq1.txt"); File a2 = new File("/pasta", "arq2.txt"); File d = new File("/pasta"); File a3 = new File(d, "arq3.txt"); Possui métodos úteis para manipulação: canread(), canwrite(), createnewfile(), delete(), exists(), getname(), getparentfile(), getpath(), isdirectory(), isfile(), ishidden(), lastmodified(), length(), list(), listfiles(), mkdir(), mkdirs(), renameto(), setlastmodified(), setreadonly(), etc. 6

Fluxos, leitores e escritores Até Java 1.4, I/O era feita por: Fluxos (streams): subclasses de InputStream e OutputStream para leitura/escrita byte a byte; Leitores (readers) e escritores (writers): subclasses de Reader e Writer para leitura/escrita caractere a caractere (padrão Unicode). A partir do Java 5: Foi criada a classe java.util.scanner para facilitar a leitura; Foram adicionados métodos à classe PrintWriter para facilitar a escrita (ex.: printf()). 7

Modo de operação Cria-se o fluxo, leitor, escritor ou scanner e este estará aberto automaticamente; Utiliza-se operações de leitura e escrita: Operações de leitura podem bloquear o processo no caso dos dados não estarem disponíveis; Métodos como available() indicam quantos bytes estão disponíveis. Fecha-se o fluxo, leitor, escritor ou scanner: A omissão da chamada ao método close() pode provocar desperdício de recursos ou leitura/escrita incompleta. 8

Aplicando o polimorfismo Métodos definidos nas classes abstratas e disponíveis em toda a hierarquia: InputStream: available(), close(), read(), read(byte[] b), reset(), skip(long l), etc.; OutputStream: close(), flush(), write(int b), write(byte[] b), etc.; Reader: close(), mark(), read(), read(char[] c), ready(), reset(), skip(long l), etc.; Writer: append(char c), close(), flush(), write(char[] c), write(int c), write(string s), etc. 9

A hierarquia de I/O São mais de 40 classes, divididas em: Fluxos de entrada (input streams); Fluxos de saída (output streams); Leitores (readers); Escritores (writers); Arquivo de acesso aleatório (random access file). Classes podem indicar a mídia de I/O ou a forma de manipulação dos dados; Podem (devem) ser combinadas para atingirmos o resultado desejado. 10

Fluxos de entrada InputStream ByteArrayInputStream ObjectInputStream FileInputStream PipedInputStream FilterInputStream SequenceInputStream DataInputStream StringBufferInputStream BufferedInputStream LineNumberInputStream PushbackInputStream 11

Combinando fluxos // Lê de um arquivo. FileInputStream fin = new FileInputStream("arquivo.txt"); // Efetua leitura com buffer. BufferedInputStream bin = new BufferedInputStream(fin); // Provê métodos de acesso a tipos de dados. DataInputStream in = new DataInputStream(bin); // Resumidamente: DataInputStream in2 = new DataInputStream(new BufferedInputStream(new FileInputStream("arq.txt"))); 12

Exemplo com fluxo de entrada // Dentro do main. Classe deve importar java.io.*. try { DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("arq.txt"))); String linha; String buffer = new String(); linha = in.readline(); // Deprecated. while (linha!= null) { buffer += linha + "\n"; linha = in.readline(); // Deprecated. in.close(); catch (IOException e) { System.out.println("Erro de I/O"); e.printstacktrace(); 13

Leitores Reader BufferedReader PipedReader LineNumberReader StringReader CharArrayReader InputStreamReader FilterReader FileReader PushbackReader 14

Exemplo com leitor // Dentro do main. Classe deve importar java.io.*. try { BufferedReader reader = new BufferedReader(new FileReader("arq.txt")); String linha; String buffer = new String(); linha = reader.readline(); while (linha!= null) { buffer += linha + "\n"; linha = reader.readline(); reader.close(); catch (IOException e) { System.out.println("Erro de I/O"); e.printstacktrace(); 15

Fluxos de saída OutputStream ByteArrayOutputStream ObjectOutputStream FileOutputStream PipedOutputStream FilterOutputStream DataOutputStream PrintStream BufferedOutputStream 16

Exemplo com fluxo de saída // Dentro do main. Classe deve importar java.io.*. try { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("arq.txt"))); out.writebytes("uma frase..."); out.writedouble(123.4567); out.close(); catch (IOException exc) { System.out.println("Erro de IO"); exc.printstacktrace(); 17

Escritores Writer BufferedWriter PipedWriter PrintWriter StringWriter CharArrayWriter OutputStreamWriter FilterWriter FileWriter 18

Exemplo com escritor // Dentro do main. Classe deve importar java.io.*. try { BufferedWriter out = new BufferedWriter(new FileWriter("arq.txt")); out.write("uma frase..."); out.write("" + 123.4567); out.close(); catch (IOException exc) { System.out.println("Erro de IO"); exc.printstacktrace(); 19

Acesso aleatório Fluxos, leitores e escritores fazem apenas acesso seqüencial; Às vezes precisamos de acessar diferentes posições do arquivo (ex.: banco de dados): Uma determinada posição do arquivo pode ser acessada diretamente; Tratamento mais eficiente de grandes volumes de dados. A classe java.io.randomaccessfile oferece suporte de leitura e escrita aleatória. 20

java.io.randomaccessfile Mistura de DataInputStream com DataOutputStream; Na criação, especifica-se o arquivo e o modo de operação: "r" ou "rw"; Usa-se métodos de manipulação de dados: close(), getfilepointer(), length(), read(byte[]), readboolean(),..., readlong(), readline(), seek(long), skipbytes(long), write(byte[]), writeboolean(boolean),..., writelong(long). 21

java.util.scanner Novidade do Java 5.0; Facilita a leitura de dados: Construtores podem receber File, InputStream, Reader e String; Divide em tokens com usedelimiter(string); Faz leitura regionalizada com uselocale(locale); Obtém dados diretamente em seus tipos, com next(), nextline(), nextboolean(), nextint(), nextdouble(), etc. 22

Serialização ObjectInputStream e ObjectOutputStream são fluxos especiais; Ao contrário de tudo mais que vimos, eles não lêem/escrevem dados de tipos primitivos; Serialização é o processo de converter um objeto em um fluxo de bits e vice-versa; Serve para gravá-lo em disco e enviá-lo pela rede para outro computador. 23

Serialização Problemas: Um objeto pode possuir referências (ponteiros) para outros. Devemos relativizá-las quando formos serializar este objeto; Ao restaurar o objeto a sua forma em memória, devemos recuperar as referências aos objetos certos. Serialização 0001010101 0001010101 0101010111 0101010101 24

java.io.serializable Felizmente, Java já implementa este mecanismo; Basta que a classe que deve ser convertida implemente a interface Serializable; Interface sem métodos, sinalizadora. Mecanismo de serialização: Converte para bytes e vice-versa; Faz e desfaz a relativização das referências; Compensa diferenças entre sistemas operacionais; Usa ObjectInputStream e ObjectOutputStream. 25

Exemplo de serialização public class Info implements Serializable { private String texto; private float numero; private Dado dado; public Info(String t, float n, Dado d) { texto = t; numero = n; dado = d; public String tostring() { return texto + "," + numero + "," + dado; 26

Exemplo de serialização import java.util.date; public class Dado implements Serializable { private Integer numero; private Date data; public Dado(Integer n, Date d) { numero = n; data = d; public String tostring() { return "(" + data + ":" + numero + ")"; 27

Exemplo de serialização import java.util.date; import java.io.*; public class Teste { public static void main(string[] args) throws Exception { Info[] vetor = new Info[] { new Info("Um", 1.1f, new Dado(10, new Date())), new Info("Dois", 2.2f, new Dado(20, new ((() Date ; /* Continua... */ 28

Exemplo de serialização ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("objs.dat")); out.writeobject("os dados serializados foram:"); out.writeobject(vetor); out.close(); ObjectInputStream in = new ObjectInputStream(new FileInputStream("objs.dat")); String msg = (String)in.readObject(); Info[] i = (Info[])in.readObject(); in.close(); + i[1]); System.out.println(msg + "\n" + i[0] + "\n" 29

Conclusões Java possui uma gama enorme de classes para as mais variadas necessidades de I/O; Para facilitar, use Scanner para leitura e PrintWriter para escrita outros fluxos, leitores ou escritores serão usados nos bastidores ; Para serializar objetos, confie no mecanismo do Java, bastando implementar a interface sinalizadora Serializable. 30