Escolar Documentos
Profissional Documentos
Cultura Documentos
LEEC@IST
Java 1/72
Introduo
comum separar os dados que entram ou saem do ambiente para o programa em informao binria e informao textual. Informao binria: constituda por zeros e uns que codificam qualquer tipo de dados e que tm que ser intepretados pela aplicao. Informao textual: constituda por letras, dgitos, caracteres especiais que no Java corresponde ao tipo primitivo char (UTF-16).
LEEC@IST
Java 2/72
Pacote java.io
Todas as classes de manipulao de ficheiros esto contidas no pacote java.io. Classes que acedem a ficheiros devem ter a directiva:
import java.io.*;
LEEC@IST
Java 3/72
Pacote java.io
O pacote java.io dividido em 5 partes:
1. Fluxo binrio (byte stream):
fluxo de entrada (input stream). fluxo de sada (output stream). leitores (readers). escritores (writers).
3. Fluxo de dados, que manipulam tipos primitivos de dados (int,) e cadeias de caracteres (String). 4. Fluxo de objectos, que transcrevem objectos para Bytes e vice-versa. 5. Classe File, de manipulao dos atributos de ficheiros.
LEEC@IST
Java 4/72
Fluxos pr-definidos
No J2SE existe a classe esttica final System, derivada de Object. A classe System possui trs atributos estticos:
InputStream in: fluxo de entrada do programa (normalmente teclado) PrintStream out: fluxo de sada do programa (normalmente monitor) PrintStream err: fluxo de envio das mensagens de erro (normalmente coincide com System.out)
LEEC@IST
Java 5/72
Fluxos binrios
InputStream: classe abstracta que l fluxos binrios de informao. OutputStream: classe abstracta que escreve fluxos binrios de informao. PrintStream: subclasse concreta de OutputStream que escreve fluxos no necessariamente binrios de informao.
LEEC@IST
Java 6/72
LEEC@IST
Java 7/72
LEEC@IST
Java 8/72
Classe OutputStream
Alguns mtodos da classe OutputStream:
close() Encerra o fluxo binrio de sada e liberta todos os recursos associados. void flush() Fora envio de informao contida num tampo para o destino. void write(byte[] b) Escreve b.length bytes da tabela de bytes b para o fluxo binrio de sada. void write(byte[] b, int off, int len) Escreve len bytes da tabela de bytes b, comeando na posio off para o fluxo binrio de sada.
LEEC@IST
Java 9/72
Classe PrintStream
Alguns mtodos da classe PrintStream:
void print(boolean b) void print(char c) void print(char[] c) void print(double d) void print(float f) void print(int i) void print(long l) void print(Object obj) void print(String s) Imprime o correspondente tipo. void println() Termina a linha corrente.
LEEC@IST
Java 10/72
Class File
Alguns construtores da classe File:
File(String pathname) Cria um ficheiro com a pathname recebida. A pathname pode ser relativa ou absoluta. No caso de ser relativa, resolvida tendo em considerao a directoria corrente do utilizador.
Testa existncia fsica do ficheiro. Testa privilgios de leitura do ficheiro. Testa privilgios de escrita do ficheiro. Apaga o ficheiro. Retorna a dimenso do ficheiro. Retorna o nome do ficheiro. Retorna o caminho do ficheiro.
Java 12/72
Classe FileDescriptor
Um objecto FileDescriptor representa um valor dependente do sistema operativo que descreve um ficheiro aberto. As aplicaes no devem criar objectos do tipo FileDescriptor, estes devem antes ser obtidos apartir do mtodo getFD dos FileInputStream e FileOutputStream.
LEEC@IST
Java 13/72
Classe FileInputStream
Construtores da classe FileInputStream:
FileInputStream(File file) FileInputStream(FileDescriptor fdObj) FileInputStream(String name) Cria um FileInputStream a partir do ficheiro recebido.
Para alm dos mtodos tpicos de close, read, skip, etc, tem ainda o seguinte mtodo:
FileDescriptor getFD() Retorna o objecto FileDescriptor que representa o ficheiro, no sistema de ficheiros, que est a ser usado pelo FileInputStream.
LEEC@IST
Java 14/72
Classe FileOutputStream
Construtores da classe FileOutputStream:
FileOutputStream(File file) FileOutputStream(File file, boolean append) FileOutputStream(FileDescriptor fdObj) FileOutputStream(String name) FileOutputStream(String name, boolean append) Cria um FileOutputStream a partir do ficheiro recebido. Os construtores que recebem um boolean append escrevem no fim do ficheiro se append for true e escrevem no incio do ficheiro se append for false.
Para alm dos mtodos tpicos de close, write, etc, tem ainda o seguinte mtodo:
FileDescriptor getFD() Retorna o objecto FileDescriptor que representa o ficheiro, no sistema de ficheiros, que est a ser usado pelo FileOutputStream.
LEEC@IST Java 15/72
LEEC@IST
Java 16/72
Fluxos de caracteres
Reader: a classe abstracta que l fluxos de caracteres. Writer: a classe abstracta que escreve fluxos de caracteres. InputStreamReader: a subclasse concreta de Reader que l fluxos binrios de informao e que os descodifica em caracteres usando um determinado charset. OutputStreamWriter: a subclasse concreta de Writer que codifica caracteres em bytes, usando um determinado charset, e os escreve em fluxos binrios de informao.
LEEC@IST
Java 17/72
Charsets padro
Qualquer implementao da plataforma Java suporta os seguintes charsets:
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set. ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1. UTF-8 Eight-bit UCS Transformation Format. UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order. UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order. UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark.
Java 18/72
LEEC@IST
LEEC@IST
Java 19/72
LEEC@IST
Java 20/72
LEEC@IST
Java 21/72
LEEC@IST
Java 22/72
caracteres.
FileWriter: a subclasse concreta de OutputStreamWriter para escrever para
ficheiros de caracteres.
LEEC@IST
Java 23/72
Classe FileReader
Construtores da classe FileReader:
FileReader(File file) FileReader(FileDescriptor fdObj) FileReader(String name) Cria um FileReader a partir do ficheiro recebido.
LEEC@IST
Java 24/72
Classe FileWriter
Construtores da classe FileWriter:
FileWriter(File file) FileWriter(File file, boolean append) FileWriter(FileDescriptor fdObj) FileWriter(String name) FileWriter(String name, boolean append) Cria um FileWriter a partir do ficheiro recebido. Os construtores que recebem um boolean append escrevem no fim do ficheiro se append for true e escrevem no incio do ficheiro se append for false.
LEEC@IST
Java 25/72
LEEC@IST
Java 26/72
LEEC@IST
Java 27/72
LEEC@IST
Java 28/72
FilterInputStream FilterOutputStream
Transferncia imediata
LEEC@IST Java 29/72
LEEC@IST
Java 31/72
LEEC@IST
Java 33/72
LEEC@IST
Java 34/72
LEEC@IST
Java 36/72
tampo
Programa Java { }
Java 37/72
LEEC@IST
Java 38/72
LEEC@IST
Java 39/72
Antes de fechar um ficheiro de escrita com tampo, necessrio chamar o mtodo flush, para todos os bytes armazenados serem enviados para o meio:
void flush()
LEEC@IST
Java 42/72
LEEC@IST
Java 43/72
Escrita
void writeBoolean(boolean) void writeChar(char) void writeByte(byte) void writeShort(short) void writeInt(int) void writeLong(long) void writeFloat(float) void writeDouble(double) void writeUTF(String)
Leitura
boolean readBoolean() char readChar() byte readByte() short readShort() int readInt() long readLong() float readFloat() double readDouble() String readUTF()
Java 45/72
LEEC@IST
Java 46/72
LEEC@IST
Java 47/72
LEEC@IST
Java 48/72
LEEC@IST
Java 49/72
LEEC@IST
Java 50/72
LEEC@IST
Java 51/72
LEEC@IST
Java 52/72
write(byte[]) write(byte[], int offset, int length) writeBoolean(boolean b) writeByte(int v) writeBytes(String s) writeChar(int v) writeChars(String s) writeDouble(double v) writeFloat(float v) writeInt(int v) writeLong(long v) writeShort(int v) writeUTF(String str)
Java 53/72
LEEC@IST
Java 54/72
No terminal imprimido
E:F:G:H:I:D
LEEC@IST
Java 55/72
InputStream Hierarchy
<<abstract>> InputStream
ObjectInputStream
FilterInputStream
FileInputStream
DataInputStream
BufferedInputStream
LEEC@IST
Java 56/72
Reader Hierarchy
LEEC@IST
Java 57/72
RandomAcessFile Hierarchy
LEEC@IST
Java 58/72
Fluxos de objectos
ObjectInputStream: a subclasse concreta de InputStream para leitura de objectos serializados. ObjectOutputStream: a subclasse concreta de OutputStream para serializao de objectos. Serializable: a interface que tem de ser implementada pelas classes que pretendem oferecer serializao.
As classes ObjectInputStream e ObjectOutputStream, quando usados conjuntamente com as classes FileInputStream e FileOutputStream, respectivamente, permitem guardar de forma persistente os objectos duma aplicao.
Java 59/72
LEEC@IST
LEEC@IST
Java 61/72
write(byte[]) write(byte[], int offset, int length) writeBoolean(boolean b) writeByte(int v) writeBytes(String s) writeChar(int v) writeChars(String s) writeDouble(double v) writeFloat(float v) writeInt(int v) writeLong(long v) writeShort(int v) writeUTF(String str)
Java 63/72
LEEC@IST
Java 64/72
Uma nova cpia do objecto pode ser reconstruda a partir da serializao anterior:
FileInputStream fis = new FileInputStream(hm.out); ObjectInputStream ois = new ObjectInputStream(fis); HashMap<?,?> hm = (HashMap<?,?>) ois.readObject();
LEEC@IST
Java 65/72
Quando o HashMap reconstrudo a partir da serializao, existiro apenas referncias para um objecto rose.jpp, e no referncias para duas cpias separadas de rose.jpg.
LEEC@IST Java 66/72
LEEC@IST
Java 70/72
LEEC@IST
Java 71/72
LEEC@IST
Java 72/72