• Nenhum resultado encontrado

Streams

N/A
N/A
Protected

Academic year: 2021

Share "Streams"

Copied!
14
0
0

Texto

(1)

1

Streams de

arquivos em Java

Cesar Rocha alunoscesar@gmail.com

Streams

Streams

de

de

arquivos em Java

arquivos em Java

Cesar Rocha Cesar Rocha alunoscesar@gmail.com alunoscesar@gmail.com

(2)

2

Objetivos

§ Explorar os conceitos fundamentais acerca do uso

de streamsstreams de arquivos em Java

§ Principais classes, abrindo conexões de streams, leitura

e gravação de objetos com streams, serialização e boas práticas de programação.

§ Como trocar dados com outros programas não-Java

§ Leitura e gravação de texto e caracteres com streams

§ Exercícios e vários exemplos de códigos que você

deve testar visando solidificar seus conhecimentos

(3)

3

Motivação

§ Vimos que uma aplicação Java possui diversos

objetos cooperantes com estado e comportamento

§ Cada objeto é único e possui seus próprios dados

§ O quê fazer quando precisamos salvar todo o estado de um (ou mais) objeto(s) no disco?

§ Aplicação bancária, onde todos os objetos Transação

devem ser gravados em um arquivo de lote diário

§ Um Jogo de computador, onde o estado atual de um

Personagem deve ser gravado para uma sessão futura

§ E quando a aplicação deve trocar informações com

(4)

4

Alternativas

§ Em Java, basicamente, há dois formatos possíveis para gravar dados em arquivos, conforme a seguir:

Œ Serialização: um arquivo irá guardar uma fila de

objetos serializados. O conteúdo deste arquivo é quase ilegível, mas natural à JVM. Quando há necessidade de recuperar o objeto a partir do arquivo, ele é “inflado” e enviado para a memória, automaticamente

Texto/Caracteres: um arquivo irá guardar uma

cadeia de caracteres. Neste processo, o programador cria seu formato pessoal de armazenamento e pode

compreendê-lo. Usa-se, geralmente, algum delimitador para materializar este formato

(5)

5

Streams

§ Você pode pensar em uma stream como um cano

por onde fluem dados:

§ Cada cano é ligado a outro (concatenado)

Arquivo FileI nput Stre am(F ile) Inpu tStre amRe ader (File Inpu tStre am) Buffe redR eade r(Inp utSt ream Read er)

(6)

6

Passos para gravar objetos

§ Seguem os passos básicos necessários para escrever

(enviar) um objeto para um arquivo no disco:

ΠCriar um FileOutputStream:

FileOutputStream fos = new

FileOutputStream(“arquivo.ser”);

Criar um ObjectOutputStream:

ObjectOutputStream oos = new

ObjectOutputStream(fos);

Ž Gravar o objeto:

Cliente c1 = new Cliente();

oos.writeObject(c1);

Fechar a conexão:

oos.close();

Note a concatena Note a concatenação. ção.

Dica:

Dica: se se arquivo.ser não existir não existir

no disco, ele ser

no disco, ele seráá criado. criado.

Dica:

Dica: se se arquivo.ser não existir não existir

no disco, ele ser

(7)

7

Interface Serializable

§ Se sua classe precisa ser serializada, implemente a interface Serializable (marker interface)

public class Cliente implements Serializable { private String nome;

private double salario; public Cliente(){...}

public String getNome(){…}

public void setNome(String n){…} public double getSalario(){…}

public void setSalario(double s){…} public String toString(){…}

public class Cliente implements Serializable { private String nome;

private double salario; public Cliente(){...}

public String getNome(){…}

public void setNome(String n){…} public double getSalario(){…}

public void setSalario(double s){…} public String toString(){…}

import java.io.FileOutputStream; import java.io.IOException;

import java.io.ObjectOutputStream; public class GravaCliente {

public static void main( String[] args ) { Cliente c = new Cliente();

try {

FileOutputStream fos = new FileOutputStream("arquivo.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(c); oos.close();

} catch ( IOException e ) { e.printStackTrace(); } }

}

import java.io.FileOutputStream; import java.io.IOException;

import java.io.ObjectOutputStream; public class GravaCliente {

public static void main( String[] args ) { Cliente c = new Cliente();

try {

FileOutputStream fos = new FileOutputStream("arquivo.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(c); oos.close();

} catch ( IOException e ) { e.printStackTrace(); } }

}

Dica:

Dica: estes valores serão salvos estes valores serão salvos em

(8)

8

Importante

§ E o que acontece quando o objeto possui variáveis membros do tipo referência (outros objetos)?

§ Quando um objeto é serializado, toda a árvore

(hierarquia) que forma o objeto principal é serializada automaticamente

§ Porém, os objetos membros também devem ser

serializáveis, caso contrário uma exceção do tipo

NotSerializableException será gerada.

§ E o que acontece quando não temos acesso a classe

membro para corrigir (alterar o código)?

(9)

9

Passos para restaurar/ler objetos

§ Seguem os passos básicos necessários para ler (restaurar) um objeto a partir de um arquivo:

ΠCriar um FileInputStream:

FileInputStream fis = new

FileInputStream(“arquivo.ser”);

Criar um ObjectInputStream:

ObjectInputStream ois = new

ObjectInputStream(fis);

Ž Ler o objeto:

Cliente novo = (Cliente) ois.readObject();

Fechar a conexão:

ois.close();

Note a concatena Note a concatenação. ção.

Dica:

Dica: os objetos devem ser lidos os objetos devem ser lidos na mesma ordem em que foram na mesma ordem em que foram gravados anteriormente (fila). gravados anteriormente (fila).

(10)

10

Passos para gravar caracteres

§ Seguem os passos básicos necessários para escrever

(enviar) um texto para um arquivo no disco:

ΠCriar um FileWriter

FileWriter fw = new

FileWriter(“arquivo.txt”);

Concatená-lo com um BufferedWriter:

BufferedWriter bw = new

BufferedWriter(fw);

Ž Gravar o texto:

bw.write(“Um texto”);

Fechar a conexão:

bw.close();

Dica:

Dica: O controle (separadores) O controle (separadores) deve ser feito pelo programador deve ser feito pelo programador

(11)

11

Exemplo

§

§ LembreLembre--se:se: o controle sobre toda a formatação do

arquivo (separadores, quebras de linha, etc) é tarefa do programador do sistema

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class GravaTexto {

public static void main( String[] args ) { try {

FileWriter fw = new FileWriter("compras.txt"); BufferedWriter bw = new BufferedWriter(fw);

bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("\n"); bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("\n"); bw.close();

} catch ( IOException e ) { e.printStackTrace(); } }

}

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class GravaTexto {

public static void main( String[] args ) { try {

FileWriter fw = new FileWriter("compras.txt"); BufferedWriter bw = new BufferedWriter(fw);

bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("\n"); bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("\n"); bw.close();

} catch ( IOException e ) { e.printStackTrace(); } }

(12)

12

Passos para ler caracteres

§ Seguem os passos básicos necessários para ler

(restaurar) um texto a partir de um arquivo:

ΠCriar um FileReader

FileReader fr = new

FileReader(“arquivo.txt”);

Concatená-lo com um BufferedReader:

BufferedReader br = new BufferedReader(fr); Ž Lê o texto: String s = br.readLine();Fechar a conexão: br.close(); Dica:

Dica: quando não houver mais quando não houver mais linhas,

(13)

13

Exemplo

§ O quê fazer para extrair os dados em cima de cada uma das linhas presentes no arquivo?

§ Use o método split() ou a classe StringTokenizer

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class LeTexto {

public static void main( String[] args ) { try {

FileReader fr = new FileReader("compras.txt"); BufferedReader br = new BufferedReader(fr); String linha = null;

while ( (linha = br.readLine()) != null ) { String[] v = linha.split("#");

for ( String dado : v ) System.out.println(dado); }

br.close();

} catch ( IOException e ) { e.printStackTrace(); } }

}

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class LeTexto {

public static void main( String[] args ) { try {

FileReader fr = new FileReader("compras.txt"); BufferedReader br = new BufferedReader(fr);

String linha = null;

while ( (linha = br.readLine()) != null ) { String[] v = linha.split("#");

for ( String dado : v ) System.out.println(dado); }

br.close();

} catch ( IOException e ) { e.printStackTrace(); } }

(14)

14

Para um bom aproveitamento:

Para um bom aproveitamento:

§ Codifique os exemplos mostrados nestes slides e verifique pontos de dúvidas

§ Resolva todas as questões da lista de lista de streamsstreams § Procure o professor ou monitor da disciplina e

questione conceitos, listas, etc.

§ Não deixe para codificar tudo e acumular assunto

para a primeira avaliação.

Referências

Documentos relacionados

funcao reparativa que se consubstancia na obrigacao de devolver a vitima ao statu quo ante, seja diante da restituicao da coisa, seja atraves de um valor pecuniario que a

The choice of solvent, an ethyl-ester of ricinoleic acid or castor-oil based biodiesel, was elaborated in previous work (Zautsen et al., 2011a) and based on the

Based on the theory that the muscle strength of elderly in- dividuals responds differently to an activity program, ac- cording to the presence or absence of a medical diagnosis

O Secretário Geral da OTM-CS fez este pronunciamento durante a cerimónia de abertura da IV Sessão Ordinária do Conselho Nacional do SNEB, realizada em finais de

Nesse contexto, vários estudos já foram realizados para elucidar os fatores ambientais e comportamentais associados ao aumento da ocorrência de sobrepeso e de obesidade na

Ato contínuo, após manifestação expressa dos proponentes e a desistência de recursos por todos os proponentes, foi realizada a abertura dos envelopes contendo as propostas

A jurisprudência do Supremo Tribunal Federal entende que, quando há deliberação de PEC que seja contrária a uma das chamadas “cláusulas pétreas” da Constituição Federal

A PROVA DE REDAÇÃO compreende uma produção textual em um dos gêneros (comentários em blog, crônicas jornalísticas, narração escolar, relato autobiográfico) e tem por