Вы находитесь на странице: 1из 28

BC & T

Universidade Federal do ABC


BC0505 Processamento da Informao

H vrias fontes (entrada) de onde se deseja ler, ou


destinos (sada) para onde se deseja gravar ou enviar
dados:
Arquivos
Conexes via socket com outros programas
Memria
Teclado, tela, impressora, mouse, etc
H vrias formas diferentes de ler/escrever dados:
Sequencialmente/aleatoriamente
Como bytes, como caracteres
Linha por linha, palavra por palavra, etc

Como oferecer estes servios em


Java??

Streams (Fluxo)

Um arquivo em Java tratado como um fluxo seqencial


de bytes
Conceito poderoso que simplifica o tratamento de
operaes de entrada e sada de dados (I/O)
Tambm usados para comunicao entre computadores
de uma rede

Java tem mais de 60 tipos de streams, ou seja, mais


de 60 classes para tratar de streams!

Streams de Bytes

Entrada

Programas usam streams de bytes para realizar entrada e sada


de bytes (ou seja, seqncias de 8 bits imagem, som, etc)
Super-classe: InputStream
Vrias sub-classes para entrada de dados

Sada

Super-classe: OutputStream
Vrias sub-classes para sada de dados

FileInputStream fis = new FileInputStream(in.txt);

FileOutputStream fos = new FileOutputStream(out.txt);

Streams de Caracteres

Entrada

Programas usam streams de caracteres para realizar


operaes de entrada e sada de dados em caracteres de 16
bits (Unicode)
Super-classe: Reader
Vrias sub-classes para entrada de dados

Sada

Super-classe: Writer
Vrias sub-classes para sada de dados
FileReader fr = new FileReader(in.txt);

FileWriter fw = new FileWriter(out.txt);

Persistncia Lendo e Escrevendo Dados

Existem vrias classes para trabalhar com arquivos em Java


Classes existentes na API podem simplificar muitas atividades

Duas abordagens so mais comuns para implementar


persistncia de objetos

Armazenar dados em arquivos de texto


Usar serializao

Persistncia de dados consiste no armazenamento


confivel e coerente das informaes, em um sistema
de armazenamento de dados

Uma exceo representa uma situao que


normalmente no ocorre e representa algo
de estranho ou errado no sistema

When something happens... Throw an exception!!!

Exemplos:
Diviso por zero
Erro de acesso a um array ndice invlido
Abrir arquivo que no existe para leitura...

public static void metodo ( ) {


try {
// bloco try
// Bloco (de comandos) relacionados execuo
// normal do programa, something doesnt happen

} catch (Exception ex1) {


// bloco catch 1
// Bloco para tratar exceo #1 de n possveis

} catch (Exception ex2) {


// bloco catch2
// Bloco para tratar exceo #2

} finally {
// bloco finally
// Bloco executado ao final do try ou do catch

Sempre que tratar escrita e leitura de arquivos em Java


necessrio usar o tratamento de excees
Exemplo de Cdigo

try {
String opcaoStr= JOptionPane.showInputDialog(Entre opcao);
int opcao= Integer.parseInt(opcaoStr);
}
Catch (Exception e) {
JOptionPane.showMessageDialog(null,Formato do No.Errado);
}

Arquivos de Texto
Atributos de objetos so salvos em arquivos um
por um, separados por algum caractere (e.g. , )
Arquivo texto pode ser editado e visualizado
facilmente por humanos
Simples para fazer intercmbio de dados entre
programas diferentes

FileReader: stream de conexo

BufferedReader: entrada buferizada

Uma operao de entrada l um caractere

Uma operao de entrada l vrios caracteres

Exemplo de cdigo:

FileReader f = new FileReader(aquivo.txt");


BufferedReader br = new BufferedReader(f);
String linha = br.readLine();

FileWriter: stream de conexo

BufferedWriter: sada buferizada

Armazena os dados de sada a serem gravados

PrintWriter: sada de objetos em texto

Uma operao de sada grava um caractere

Oferece vrios mtodos para gravar dados

Exemplo de cdigo
FileWriter f = new FileWriter(arquivo.txt");
PrintWriter pw = new PrintWriter (f);
pw.println(Hello World!);

Formato Desejado do Arquivo de Texto


Arthur:9:10,0
Gabriela:14:10,0
Nilson:38:10,0
Maria:20:8,0
Jos:18:5,0
Joana:17:7,0

public void exportarAlunos(Aluno[] alunos, int nAlunos){


PrintWriter pw = new PrintWriter(new
FileWriter("turma.txt"));
int i;
for ( i = 0; i < nAlunos; i++ ){
String linha = String.format("%s:%d:%.1f",
alunos[i].getNome(),
alunos[i].getIdade(),
alunos[i].getNota());
pw.println(linha);
}

pw.flush();
pw.close();
}

public void importarAlunos( Turma minhaTurma ){


BufferedReader br = new BufferedReader(new
FileReader("turma.txt"));
String linha;
String[] campos = null;

while ((linha = br.readLine()) != null){


campos = linha.split(":");
String nome = campos[0];
int idade = Integer.parseInt(campos[1]);
double nota = Double.parseDouble (
campos[2].replace(",", ".") );
minhaTurma.incluirAluno(nome, idade, nota);
}
br.close();
}

Serializao:
Processo de transformar o estado de um objeto em
uma seqncia de bytes que representem o valor de
seus atributos
Obs: mtodos e construtores no fazem parte da
serializao
Aps a serializao possvel gravar o objeto
serializado (seqncia de bytes) em um arquivo, envilo atravs da rede, etc.

Deserializao:
o processo inverso, de reconstruir um objeto a partir
de uma seqncia de bytes para o mesmo estado que
o objeto estava antes de ser serializado
Quando os objetos forem recuperados, preciso
recriar as instncias e reconect-las de maneira
correta

Serializao (escrita)

FileOutputStream: Stream de conexo


ObjectOutputStream: Stream que faz a serializao

Exemplo de cdigo

FileOutputStream out = new FileOutputStream(save.ser);


ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(new Date());
oos.close();

Exemplo de cdigo

public void exportarAlunos ( Aluno[] alunos,


int nalunos){
ObjectOutputStream os = new ObjectOutputStream
(new FileOutputStream("Turma.ser"));
os.writeObject(nalunos);
int i;
for ( i = 0; i < nalunos; i++ ) {
os.writeObject(alunos[i]);
}
os.close();
}

Exemplo de cdigo

Classe aluno deve ser Serializvel


public class Aluno implements Serializable {
.
}

Deserializao (leitura)

FileInputStream: stream de conexo


ObjectInputStream: Stream que faz a deserializao

Exemplo de cdigo

FileInputStream in = new FileInputStream( save.ser );


ObjectInputStream ois = new ObjectInputStream( in );
Date d = (Date) ois.readObject();
ois.close();

Exemplo de cdigo

public void importarAlunos ( Turma minhaTurma ){


ObjectInputStream os = new ObjectInputStream
(new FileInputStream("Turma.ser"));
int numero = (Integer) os.readObject();
int i;
for ( i = 0; i < numero; i++ ) {
Aluno a = (Aluno) os.readObject();
minhaTurma.incluirAluno(a);
}
os.close();
}

Se um objeto possui referncias para outros objetos


(ou arrays), esses objetos so tambm serializados

Se esses objetos, por sua vez, possuem referncias para


outros objetos, esses tambm so serializados

E assim por diante...

Essa abordagem pode ser usada, por exemplo, para


fazer cpias de objetos

Apostila Caelum:

http://downloads.caelum.com.br/apostila/ca
elum-java-objetos-fj11.pdf

Site SUN:

http://java.sun.com/docs/books/tutorial/e
ssential/io/

Вам также может понравиться