SlideShare una empresa de Scribd logo
1 de 84
Descargar para leer sin conexión
http://publicationslist.org/junio
Java Streams (e arquivo)
Prof. Jose Fernando Rodrigues Junior
http://www.icmc.usp.br/~junio
junio@icmc.usp.br
INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE
COMPUTAÇÃO - USP
SCC0504 - Programação Orientada a
Objetos
http://publicationslist.org/junio
• O conceito de streams se refere a uma analogia à água de
um rio, o que seria equivalente aos dados que passam por
um canal de comunicação
• stream (substantivo): pequeno rio, riacho, córrego
(wordreference.com)
• A maior diferença é que a água nos aguarda antes de fluir, e
que a fonte de água não é indeterminada
• O conceito se tornou bastante usado em toda a computação
na década de 90, sendo usado em diversas linguagens de
programação
Introdução
http://publicationslist.org/junio
• Streams podem se referir aos dados que fluem de diversas
fontes distintas: arquivos, conexões de rede, entrada padrão
de dados (teclado), ou mesmo a memória
• Streams não podem ser navegadas para frente e para trás, e
também não possuem ponteiros para posição do arquivo
• Para casos assim, usa-se a classe RandomAccessFile, entre
outras
• Streams se baseiam no fluxo unidirecional de bytes, de
characteres, de objetos, entre outras prossibilidades
Introdução
http://publicationslist.org/junio
A classe File
http://publicationslist.org/junio
• File é uma classe que permite gerenciar arquivos
• Ela abstrai os metadados de um dado arquivo ou diretório,
como seu caminho, tamanho, e permissões de acesso
Exemplo:
File fonte = new File(“Poo.dat”);
if(fonte.exists( )){
if((!fonte.isHidden()) && (!fonte.isDirectory( ))){
if(fonte.canRead( ) && fonte.canWrite( )){
//caminho considerando o directório corrente
System.out.println(fonte.getPath( ));
//caminho completo que pode ser um soft link (atalho do SO)
System.out.println(fonte.getAbsolutePath( ));
//caminho completo como considerado pelo sistema de arquivos
System.out.println(fonte.getCanonicalPath( ));
System.out.println(fonte.lenght( ));
fonte.delete( );
}
}
}
Classe File
http://publicationslist.org/junio
• File é uma classe que permite gerenciar arquivos
• Ela abstrai os metadados de um dado arquivo ou diretório,
como seu caminho, tamanho, e permissões de acesso
Exemplo:
File fonte = new File("c:system");
if(fonte.isDirectory( )){
File[] files = fonte.listFiles();
for(int i = 0; i < files.length; i++)
System.out.println(files[i].getName());
}
fonte.renameTo(new File(“c:system64”));
Classe File
http://publicationslist.org/junio
Leitura de bytes
http://publicationslist.org/junio
• Exemplo:
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
tanque
(File)
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
cano
(FileInputStream)
tanque
(File)
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
byte[ ] balde = new byte[64]; /*BUFFER*/
cano
(FileInputStream)
tanque
(File)
balde
(byte[64])
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
byte[ ] balde = new byte[64]; /*BUFFER*/
cano.read(balde);
cano
(FileInputStream)
tanque
(File)
balde
(byte[64])
01011001
10110010
10101010
10111100
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
byte[ ] balde = new byte[64]; /*BUFFER*/
cano.read(balde);
cano
(FileInputStream)
tanque
(File)
balde
(byte[64])
01011001
10110010
10101010
10111100
File-FileInputStream
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
byte[ ] balde = new byte[64]; /*BUFFER*/
cano.read(balde);
System.out.println("CANO (64 bytes): " + balde);
cano
(FileInputStream)
tanque
(File)
File-FileInputStream
01011001
10110010
10101010
10111100
System.out
(PrintStream)
http://publicationslist.org/junio
• Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
byte[ ] balde = new byte[64]; /*BUFFER*/
cano.read(balde);
System.out.println("CANO (64 bytes): " + balde);
cano
(FileInputStream)
tanque
(File)
File-FileInputStream
01011001
10110010
10101010
10111100
System.out
(PrintStream)
Como se vê, os streams do Java funcionam segundo
um sistema de pipeline (tubulação) – um mecanismo
fornece os dados para a próxima etapa,
sucessivamente.
http://publicationslist.org/junio
Copiando um arquivo
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File-FileInputStream-FileOutputStream
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
File-FileInputStream-FileOutputStream
destino
(File)
fonte
(File)
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
destino
(File)
fonte
(File) canoIn
(FileInputStream)
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
destino
(File)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192])
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
destino
(File)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192])
balde
01011001
10110010
10101010
10111100
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
while (length != -1) {
canoOut.write(balde, 0, length);
length = canoIn.read(balde);
}
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
destino
(File)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192])
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
while (length != -1) {
canoOut.write(balde, 0, length);
length = canoIn.read(balde);
}
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192])
destino
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
while (length != -1) {
canoOut.write(balde, 0, length);
length = canoIn.read(balde);
}
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192]) destino
(File)
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
while (length != -1) {
canoOut.write(balde, 0, length);
length = canoIn.read(balde);
}
File-FileInputStream-FileOutputStream
canoOut
(FileOutputStream)
fonte
(File) canoIn
(FileInputStream)
balde
(byte[8192])
destino
(File)
http://publicationslist.org/junio
• Copiando um arquivo com streams. Exemplo:
File fonte = new File(nomeFonte);
File destino = new File(nomeDestino);
FileInputStream canoIn = new FileInputStream(fonte);
FileOutputStream canoOut = new FileOutputStream(destino);
byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/
int length = canoIn.read(balde);
while (length != -1) {
canoOut.write(balde, 0, length);
length = canoIn.read(balde);
}
canoIn.close();
canoOut.close();
File-FileInputStream-FileOutputStream
fonte
(File)
destino
(File)
balde
(byte[8192])
http://publicationslist.org/junio
Leitura de bytes como caracteres
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File-FileInputStream-InputStreamReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
tanque
(File)
File-FileInputStream-InputStreamReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
char[ ] balde = new char[64]; /*BUFFER*/
File-FileInputStream-InputStreamReader
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
balde
(char[64])
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
char[ ] balde = new char[64]; /*BUFFER*/
filtro.read(balde);
p r o
g r a
m a c
a o .
File-FileInputStream-InputStreamReader
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
balde
(char[64])
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
char[ ] balde = new char[64]; /*BUFFER*/
filtro.read(balde);
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader
balde
(char[64])
p r o
g r a
m a c
a o .
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
char[ ] balde = new char[64]; /*BUFFER*/
filtro.read(balde);
System.out.println("CANO (64 chars): " + balde);
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader
System.out
(PrintStream)
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
char[ ] balde = new char[64]; /*BUFFER*/
filtro.read(balde);
System.out.println("CANO (64 chars): " + balde);
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader
System.out
(PrintStream)
Os readers do Java interpretam os dados como caracteres e
não como bytes.
Entre eles: BufferedReader, CharArrayReader, FilterReader,
InputStreamReader, PipedReader, StringReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File-FileInputStream-InputStreamReader-BufferedReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
BufferedReader decantador = new BufferedReader(filtro);//BUFFER
decantador
(BuffereReader)
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
BufferedReader decantador = new BufferedReader(filtro);//BUFFER
String balde = decantador.readLine();
decantador
(BuffereReader)
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
balde
“Estruturas de dados n”
http://publicationslist.org/junio
• Leitores específicos fornecem os dados de diferentes
maneiras. Exemplo:
File tanque = new File(“agua.txt”);
FileInputStream cano = new FileInputStream(tanque);
InputStreamReader filtro = new InputStreamReader(cano);
BufferedReader decantador = new BufferedReader(filtro);//BUFFER
String balde = decantador.readLine();
System.out.println(balde);
decantador
(BuffereReader)
filtro
(InputStreamReader )
cano
(FileInputStream)
tanque
(File)
File-FileInputStream-InputStreamReader-BufferedReader
System.out
(PrintStream)
http://publicationslist.org/junio
Escrita/leitura de objetos
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File-FileOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
File-FileOutputStream-ObjectOutputStream
tanque
(File)
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
t
c
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
t
c
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
• Atenção: qualquer classe escrita em Java pode ser
serializada, para isso ela tem que implementar a Interface
Serializable.
• A Interface Serializable é uma “tagging interface”, ela não
possui nenhum método e nenhum atributo. Ela apenas tipifica
uma dada classe indicando que ela pode ser escrita como uma
sequência de bytes.
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
t
c
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
t
tanque
(File)
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
tanque
(File)
File-FileOutputStream-ObjectOutputStream
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
FileInputStream canoIn = new FileInputStream(tanque);
File-FileInputStream-ObjectInputStream
tanque
(File)
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream ) canoIn
(FileInputStream)
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
FileInputStream canoIn = new FileInputStream(tanque);
ObjectInputStream deserializador = new ObjectInputStream(canoIn);
tanque
(File)
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
deserializador
(ObjectInputStream )
canoIn
(FileInputStream)
File-FileInputStream-ObjectInputStream
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
FileInputStream canoIn = new FileInputStream(tanque);
ObjectInputStream deserializador = new ObjectInputStream(canoIn);
c = (Circulo) deserializador.readObject();
tanque
(File)
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
deserializador
(ObjectInputStream )
canoIn
(FileInputStream)
c
File-FileInputStream-ObjectInputStream
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
FileInputStream canoIn = new FileInputStream(tanque);
ObjectInputStream deserializador = new ObjectInputStream(canoIn);
c = (Circulo) deserializador.readObject();
t = (Triangulo) deserializador.readObject();
tanque
(File)
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
deserializador
(ObjectInputStream )
canoIn
(FileInputStream)
t
c
File-FileInputStream-ObjectInputStream
http://publicationslist.org/junio
• Também é possível fazer stream com instâncias de objetos,
lendo e escrevendo objetos inteiros em arquivo 
serialização. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
ObjectOutputStream serializador = new ObjectOutputStream(canoOut);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
FileInputStream canoIn = new FileInputStream(tanque);
ObjectInputStream deserializador = new ObjectInputStream(canoIn);
c = (Circulo) deserializador.readObject();
t = (Triangulo) deserializador.readObject();
tanque
(File)
tanque
(File)
canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
deserializador
(ObjectInputStream )
canoIn
(FileInputStream)
t
c
File-FileInputStream-ObjectInputStream
http://publicationslist.org/junio
Escrita de objetos com compactação
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
tanque
(File)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
tanque
(File)canoOut
(FileOutputStream)
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
tanque
(File)canoOut
(FileOutputStream)
compactador
(GZIPOutputStream)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
ObjectOutputStream serializador = new ObjectOutputStream(compactador);
tanque
(File)canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
compactador
(GZIPOutputStream)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
ObjectOutputStream serializador = new ObjectOutputStream(compactador);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
t
c
tanque
(File)canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
compactador
(GZIPOutputStream)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
ObjectOutputStream serializador = new ObjectOutputStream(compactador);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
t
c
tanque
(File)canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
compactador
(GZIPOutputStream)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
ObjectOutputStream serializador = new ObjectOutputStream(compactador);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
t canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
compactador
(GZIPOutputStream)
tanque
(File)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
• Pode-se também usar compactação. Exemplo:
File tanque = new File(“POO.dat”);
tanque.createNewFile();
FileOutputStream canoOut = new FileOutputStream(tanque);
GZIPOutputStream compactador = new GZIPOutputStream(canoOut);
ObjectOutputStream serializador = new ObjectOutputStream(compactador);
Circulo c = new Circulo(232.43f, 432.15f, "Um circulo");
Triangulo t = new Triangulo(543, 67, 215, "Um triangulo");
serializador.writeObject(c);
serializador.writeObject(t);
 Exercício: escreva o código e ilustre a leitura dos objetos que
foram compactados em arquivo.
tanque
(File)canoOut
(FileOutputStream)
serializador
(ObjectOutputStream )
compactador
(GZIPOutputStream)
File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
http://publicationslist.org/junio
Acesso aleatório a arquivo
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File-RandomAccessFile
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
File-RandomAccessFile
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
File-RandomAccessFile
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
File-RandomAccessFile
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
File-RandomAccessFile
Professional JPP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
File-RandomAccessFile
Professional JPP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
/*Lê linha por linha*/
while (raf.getFilePointer() < raf.length()) {
System.out.println(raf.readUTF());
}
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
/*Lê linha por linha*/
while (raf.getFilePointer() < raf.length()) {
System.out.println(raf.readUTF());
}
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
/*Lê linha por linha*/
while (raf.getFilePointer() < raf.length()) {
System.out.println(raf.readUTF());
}
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
/*Lê linha por linha*/
while (raf.getFilePointer() < raf.length()) {
System.out.println(raf.readUTF());
}
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming
…
http://publicationslist.org/junio
• Acesso aleatório. Exemplo:
File fTemp = new File(sAFile);
RandomAccessFile raf = new RandomAccessFile(sAFile, "rw");
String books[] = new String[5];
books[0] = "Professional JPP";
books[1] = "The Java Application Programming Interface";
books[2] = "Java Security";
books[3] = "Java Security Handbook";
books[4] = "Hacking Exposed J2EE & Java";
/*Escreve a partir do início*/
for (int i = 0; i < books.length; i++) {
raf.writeUTF(books[i]);
}
raf.seek(0); //volta ao início
raf.writeUTF("Professional JSP"); //sobreescreve
raf.seek(raf.length()); //vai para o final
raf.writeUTF("Servlet & JSP Programming"); //escreve (append)
raf.seek(0); //início de novo
/*Lê linha por linha*/
while (raf.getFilePointer() < raf.length()) {
System.out.println(raf.readUTF());
}
raf.close(); //fecha
File-RandomAccessFile
Professional JSP
The Java Application
Programming Interface
Java Security
Java Security Handbook
Hacking Exposed J2EE & Java
Servlet & JSP Programming

Más contenido relacionado

Similar a Java Streams e arquivos

Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosMarcello Thiry
 
Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04thomasdacosta
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Aula 05 - Programação Web - Trabalhando com arquivos em PHP
Aula 05 - Programação Web - Trabalhando com arquivos em PHPAula 05 - Programação Web - Trabalhando com arquivos em PHP
Aula 05 - Programação Web - Trabalhando com arquivos em PHPDalton Martins
 
Ciência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoCiência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoÁlvaro Justen
 
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Julio Oliveira
 

Similar a Java Streams e arquivos (20)

Java9
Java9Java9
Java9
 
Algoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - ArquivosAlgoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - Arquivos
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivos
 
Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04
 
Arquivos em C
Arquivos em CArquivos em C
Arquivos em C
 
Resumo Windows
Resumo WindowsResumo Windows
Resumo Windows
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Estrutura de dados ii
Estrutura de dados iiEstrutura de dados ii
Estrutura de dados ii
 
Java 05
Java 05Java 05
Java 05
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Pascal Arquivos
Pascal ArquivosPascal Arquivos
Pascal Arquivos
 
Files’’ c
Files’’ cFiles’’ c
Files’’ c
 
Files’’ c
Files’’ cFiles’’ c
Files’’ c
 
Files’’ c
Files’’ cFiles’’ c
Files’’ c
 
Aula 05 - Programação Web - Trabalhando com arquivos em PHP
Aula 05 - Programação Web - Trabalhando com arquivos em PHPAula 05 - Programação Web - Trabalhando com arquivos em PHP
Aula 05 - Programação Web - Trabalhando com arquivos em PHP
 
Linguagem C 10 Arquivos
Linguagem C 10 ArquivosLinguagem C 10 Arquivos
Linguagem C 10 Arquivos
 
Ciência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoCiência de Dados na Linha de Comando
Ciência de Dados na Linha de Comando
 
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
 

Más de Universidade de São Paulo

Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopUniversidade de São Paulo
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...Universidade de São Paulo
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Universidade de São Paulo
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Universidade de São Paulo
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUniversidade de São Paulo
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsUniversidade de São Paulo
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelUniversidade de São Paulo
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...Universidade de São Paulo
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesUniversidade de São Paulo
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Universidade de São Paulo
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkUniversidade de São Paulo
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyUniversidade de São Paulo
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsUniversidade de São Paulo
 

Más de Universidade de São Paulo (20)

A gentle introduction to Deep Learning
A gentle introduction to Deep LearningA gentle introduction to Deep Learning
A gentle introduction to Deep Learning
 
Computação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalhoComputação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalho
 
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approach
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...
 
Apresentacao vldb
Apresentacao vldbApresentacao vldb
Apresentacao vldb
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media images
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring network
 
Graph-based Relational Data Visualization
Graph-based RelationalData VisualizationGraph-based RelationalData Visualization
Graph-based Relational Data Visualization
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical Study
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Dawarehouse e OLAP
Dawarehouse e OLAPDawarehouse e OLAP
Dawarehouse e OLAP
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisions
 

Java Streams e arquivos

  • 1. http://publicationslist.org/junio Java Streams (e arquivo) Prof. Jose Fernando Rodrigues Junior http://www.icmc.usp.br/~junio junio@icmc.usp.br INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - USP SCC0504 - Programação Orientada a Objetos
  • 2. http://publicationslist.org/junio • O conceito de streams se refere a uma analogia à água de um rio, o que seria equivalente aos dados que passam por um canal de comunicação • stream (substantivo): pequeno rio, riacho, córrego (wordreference.com) • A maior diferença é que a água nos aguarda antes de fluir, e que a fonte de água não é indeterminada • O conceito se tornou bastante usado em toda a computação na década de 90, sendo usado em diversas linguagens de programação Introdução
  • 3. http://publicationslist.org/junio • Streams podem se referir aos dados que fluem de diversas fontes distintas: arquivos, conexões de rede, entrada padrão de dados (teclado), ou mesmo a memória • Streams não podem ser navegadas para frente e para trás, e também não possuem ponteiros para posição do arquivo • Para casos assim, usa-se a classe RandomAccessFile, entre outras • Streams se baseiam no fluxo unidirecional de bytes, de characteres, de objetos, entre outras prossibilidades Introdução
  • 5. http://publicationslist.org/junio • File é uma classe que permite gerenciar arquivos • Ela abstrai os metadados de um dado arquivo ou diretório, como seu caminho, tamanho, e permissões de acesso Exemplo: File fonte = new File(“Poo.dat”); if(fonte.exists( )){ if((!fonte.isHidden()) && (!fonte.isDirectory( ))){ if(fonte.canRead( ) && fonte.canWrite( )){ //caminho considerando o directório corrente System.out.println(fonte.getPath( )); //caminho completo que pode ser um soft link (atalho do SO) System.out.println(fonte.getAbsolutePath( )); //caminho completo como considerado pelo sistema de arquivos System.out.println(fonte.getCanonicalPath( )); System.out.println(fonte.lenght( )); fonte.delete( ); } } } Classe File
  • 6. http://publicationslist.org/junio • File é uma classe que permite gerenciar arquivos • Ela abstrai os metadados de um dado arquivo ou diretório, como seu caminho, tamanho, e permissões de acesso Exemplo: File fonte = new File("c:system"); if(fonte.isDirectory( )){ File[] files = fonte.listFiles(); for(int i = 0; i < files.length; i++) System.out.println(files[i].getName()); } fonte.renameTo(new File(“c:system64”)); Classe File
  • 9. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); tanque (File) File-FileInputStream
  • 10. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); cano (FileInputStream) tanque (File) File-FileInputStream
  • 11. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); byte[ ] balde = new byte[64]; /*BUFFER*/ cano (FileInputStream) tanque (File) balde (byte[64]) File-FileInputStream
  • 12. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); byte[ ] balde = new byte[64]; /*BUFFER*/ cano.read(balde); cano (FileInputStream) tanque (File) balde (byte[64]) 01011001 10110010 10101010 10111100 File-FileInputStream
  • 13. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); byte[ ] balde = new byte[64]; /*BUFFER*/ cano.read(balde); cano (FileInputStream) tanque (File) balde (byte[64]) 01011001 10110010 10101010 10111100 File-FileInputStream
  • 14. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); byte[ ] balde = new byte[64]; /*BUFFER*/ cano.read(balde); System.out.println("CANO (64 bytes): " + balde); cano (FileInputStream) tanque (File) File-FileInputStream 01011001 10110010 10101010 10111100 System.out (PrintStream)
  • 15. http://publicationslist.org/junio • Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); byte[ ] balde = new byte[64]; /*BUFFER*/ cano.read(balde); System.out.println("CANO (64 bytes): " + balde); cano (FileInputStream) tanque (File) File-FileInputStream 01011001 10110010 10101010 10111100 System.out (PrintStream) Como se vê, os streams do Java funcionam segundo um sistema de pipeline (tubulação) – um mecanismo fornece os dados para a próxima etapa, sucessivamente.
  • 17. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File-FileInputStream-FileOutputStream
  • 18. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); File-FileInputStream-FileOutputStream destino (File) fonte (File)
  • 19. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); File-FileInputStream-FileOutputStream canoOut (FileOutputStream) destino (File) fonte (File) canoIn (FileInputStream)
  • 20. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ File-FileInputStream-FileOutputStream canoOut (FileOutputStream) destino (File) fonte (File) canoIn (FileInputStream) balde (byte[8192])
  • 21. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); File-FileInputStream-FileOutputStream canoOut (FileOutputStream) destino (File) fonte (File) canoIn (FileInputStream) balde (byte[8192]) balde 01011001 10110010 10101010 10111100
  • 22. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); while (length != -1) { canoOut.write(balde, 0, length); length = canoIn.read(balde); } File-FileInputStream-FileOutputStream canoOut (FileOutputStream) destino (File) fonte (File) canoIn (FileInputStream) balde (byte[8192])
  • 23. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); while (length != -1) { canoOut.write(balde, 0, length); length = canoIn.read(balde); } File-FileInputStream-FileOutputStream canoOut (FileOutputStream) fonte (File) canoIn (FileInputStream) balde (byte[8192]) destino
  • 24. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); while (length != -1) { canoOut.write(balde, 0, length); length = canoIn.read(balde); } File-FileInputStream-FileOutputStream canoOut (FileOutputStream) fonte (File) canoIn (FileInputStream) balde (byte[8192]) destino (File)
  • 25. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); while (length != -1) { canoOut.write(balde, 0, length); length = canoIn.read(balde); } File-FileInputStream-FileOutputStream canoOut (FileOutputStream) fonte (File) canoIn (FileInputStream) balde (byte[8192]) destino (File)
  • 26. http://publicationslist.org/junio • Copiando um arquivo com streams. Exemplo: File fonte = new File(nomeFonte); File destino = new File(nomeDestino); FileInputStream canoIn = new FileInputStream(fonte); FileOutputStream canoOut = new FileOutputStream(destino); byte[] balde = new byte[8192]; /*2^13 bytes de buffer*/ int length = canoIn.read(balde); while (length != -1) { canoOut.write(balde, 0, length); length = canoIn.read(balde); } canoIn.close(); canoOut.close(); File-FileInputStream-FileOutputStream fonte (File) destino (File) balde (byte[8192])
  • 28. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File-FileInputStream-InputStreamReader
  • 29. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); tanque (File) File-FileInputStream-InputStreamReader
  • 30. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader
  • 31. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader
  • 32. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); char[ ] balde = new char[64]; /*BUFFER*/ File-FileInputStream-InputStreamReader filtro (InputStreamReader ) cano (FileInputStream) tanque (File) balde (char[64])
  • 33. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); char[ ] balde = new char[64]; /*BUFFER*/ filtro.read(balde); p r o g r a m a c a o . File-FileInputStream-InputStreamReader filtro (InputStreamReader ) cano (FileInputStream) tanque (File) balde (char[64])
  • 34. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); char[ ] balde = new char[64]; /*BUFFER*/ filtro.read(balde); filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader balde (char[64]) p r o g r a m a c a o .
  • 35. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); char[ ] balde = new char[64]; /*BUFFER*/ filtro.read(balde); System.out.println("CANO (64 chars): " + balde); filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader System.out (PrintStream)
  • 36. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); char[ ] balde = new char[64]; /*BUFFER*/ filtro.read(balde); System.out.println("CANO (64 chars): " + balde); filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader System.out (PrintStream) Os readers do Java interpretam os dados como caracteres e não como bytes. Entre eles: BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
  • 37. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File-FileInputStream-InputStreamReader-BufferedReader
  • 38. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); tanque (File) File-FileInputStream-InputStreamReader-BufferedReader
  • 39. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader-BufferedReader
  • 40. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader-BufferedReader
  • 41. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); BufferedReader decantador = new BufferedReader(filtro);//BUFFER decantador (BuffereReader) filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader-BufferedReader
  • 42. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); BufferedReader decantador = new BufferedReader(filtro);//BUFFER String balde = decantador.readLine(); decantador (BuffereReader) filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader-BufferedReader balde “Estruturas de dados n”
  • 43. http://publicationslist.org/junio • Leitores específicos fornecem os dados de diferentes maneiras. Exemplo: File tanque = new File(“agua.txt”); FileInputStream cano = new FileInputStream(tanque); InputStreamReader filtro = new InputStreamReader(cano); BufferedReader decantador = new BufferedReader(filtro);//BUFFER String balde = decantador.readLine(); System.out.println(balde); decantador (BuffereReader) filtro (InputStreamReader ) cano (FileInputStream) tanque (File) File-FileInputStream-InputStreamReader-BufferedReader System.out (PrintStream)
  • 45. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File-FileOutputStream-ObjectOutputStream
  • 46. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); File-FileOutputStream-ObjectOutputStream tanque (File)
  • 47. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream)
  • 48. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream )
  • 49. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); t c File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream )
  • 50. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); t c File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) • Atenção: qualquer classe escrita em Java pode ser serializada, para isso ela tem que implementar a Interface Serializable. • A Interface Serializable é uma “tagging interface”, ela não possui nenhum método e nenhum atributo. Ela apenas tipifica uma dada classe indicando que ela pode ser escrita como uma sequência de bytes.
  • 51. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); t c File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream )
  • 52. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); t tanque (File) File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream )
  • 53. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); tanque (File) File-FileOutputStream-ObjectOutputStream tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream )
  • 54. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); FileInputStream canoIn = new FileInputStream(tanque); File-FileInputStream-ObjectInputStream tanque (File) tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) canoIn (FileInputStream)
  • 55. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); FileInputStream canoIn = new FileInputStream(tanque); ObjectInputStream deserializador = new ObjectInputStream(canoIn); tanque (File) tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) deserializador (ObjectInputStream ) canoIn (FileInputStream) File-FileInputStream-ObjectInputStream
  • 56. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); FileInputStream canoIn = new FileInputStream(tanque); ObjectInputStream deserializador = new ObjectInputStream(canoIn); c = (Circulo) deserializador.readObject(); tanque (File) tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) deserializador (ObjectInputStream ) canoIn (FileInputStream) c File-FileInputStream-ObjectInputStream
  • 57. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); FileInputStream canoIn = new FileInputStream(tanque); ObjectInputStream deserializador = new ObjectInputStream(canoIn); c = (Circulo) deserializador.readObject(); t = (Triangulo) deserializador.readObject(); tanque (File) tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) deserializador (ObjectInputStream ) canoIn (FileInputStream) t c File-FileInputStream-ObjectInputStream
  • 58. http://publicationslist.org/junio • Também é possível fazer stream com instâncias de objetos, lendo e escrevendo objetos inteiros em arquivo  serialização. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); ObjectOutputStream serializador = new ObjectOutputStream(canoOut); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); FileInputStream canoIn = new FileInputStream(tanque); ObjectInputStream deserializador = new ObjectInputStream(canoIn); c = (Circulo) deserializador.readObject(); t = (Triangulo) deserializador.readObject(); tanque (File) tanque (File) canoOut (FileOutputStream) serializador (ObjectOutputStream ) deserializador (ObjectInputStream ) canoIn (FileInputStream) t c File-FileInputStream-ObjectInputStream
  • 60. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 61. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); tanque (File) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 62. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); File-FileOutputStream-GZIPOutputStream-ObjectOutputStream tanque (File)canoOut (FileOutputStream)
  • 63. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); tanque (File)canoOut (FileOutputStream) compactador (GZIPOutputStream) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 64. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); ObjectOutputStream serializador = new ObjectOutputStream(compactador); tanque (File)canoOut (FileOutputStream) serializador (ObjectOutputStream ) compactador (GZIPOutputStream) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 65. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); ObjectOutputStream serializador = new ObjectOutputStream(compactador); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); t c tanque (File)canoOut (FileOutputStream) serializador (ObjectOutputStream ) compactador (GZIPOutputStream) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 66. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); ObjectOutputStream serializador = new ObjectOutputStream(compactador); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); t c tanque (File)canoOut (FileOutputStream) serializador (ObjectOutputStream ) compactador (GZIPOutputStream) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 67. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); ObjectOutputStream serializador = new ObjectOutputStream(compactador); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t); t canoOut (FileOutputStream) serializador (ObjectOutputStream ) compactador (GZIPOutputStream) tanque (File) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 68. http://publicationslist.org/junio • Pode-se também usar compactação. Exemplo: File tanque = new File(“POO.dat”); tanque.createNewFile(); FileOutputStream canoOut = new FileOutputStream(tanque); GZIPOutputStream compactador = new GZIPOutputStream(canoOut); ObjectOutputStream serializador = new ObjectOutputStream(compactador); Circulo c = new Circulo(232.43f, 432.15f, "Um circulo"); Triangulo t = new Triangulo(543, 67, 215, "Um triangulo"); serializador.writeObject(c); serializador.writeObject(t);  Exercício: escreva o código e ilustre a leitura dos objetos que foram compactados em arquivo. tanque (File)canoOut (FileOutputStream) serializador (ObjectOutputStream ) compactador (GZIPOutputStream) File-FileOutputStream-GZIPOutputStream-ObjectOutputStream
  • 71. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); File-RandomAccessFile
  • 72. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); File-RandomAccessFile
  • 73. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; File-RandomAccessFile
  • 74. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } File-RandomAccessFile Professional JPP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java
  • 75. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início File-RandomAccessFile Professional JPP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java
  • 76. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java
  • 77. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java
  • 78. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming
  • 79. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming
  • 80. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo /*Lê linha por linha*/ while (raf.getFilePointer() < raf.length()) { System.out.println(raf.readUTF()); } File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming
  • 81. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo /*Lê linha por linha*/ while (raf.getFilePointer() < raf.length()) { System.out.println(raf.readUTF()); } File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming
  • 82. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo /*Lê linha por linha*/ while (raf.getFilePointer() < raf.length()) { System.out.println(raf.readUTF()); } File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming
  • 83. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo /*Lê linha por linha*/ while (raf.getFilePointer() < raf.length()) { System.out.println(raf.readUTF()); } File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming …
  • 84. http://publicationslist.org/junio • Acesso aleatório. Exemplo: File fTemp = new File(sAFile); RandomAccessFile raf = new RandomAccessFile(sAFile, "rw"); String books[] = new String[5]; books[0] = "Professional JPP"; books[1] = "The Java Application Programming Interface"; books[2] = "Java Security"; books[3] = "Java Security Handbook"; books[4] = "Hacking Exposed J2EE & Java"; /*Escreve a partir do início*/ for (int i = 0; i < books.length; i++) { raf.writeUTF(books[i]); } raf.seek(0); //volta ao início raf.writeUTF("Professional JSP"); //sobreescreve raf.seek(raf.length()); //vai para o final raf.writeUTF("Servlet & JSP Programming"); //escreve (append) raf.seek(0); //início de novo /*Lê linha por linha*/ while (raf.getFilePointer() < raf.length()) { System.out.println(raf.readUTF()); } raf.close(); //fecha File-RandomAccessFile Professional JSP The Java Application Programming Interface Java Security Java Security Handbook Hacking Exposed J2EE & Java Servlet & JSP Programming