Académique Documents
Professionnel Documents
Culture Documents
http://www.directnet.com.br/users/rafael.santos
Saída
1
Conceitos Básicos: Entrada e Saída
• Abstração: Streams
• Entrada e saída não precisa ser
necessariamente usando um
meio físico local
Entrada
... Saída
2
Conceitos Básicos: Exceções
• Algo pode dar errado !
• Se a Stream for correspondente a um arquivo
de entrada:
– O arquivo existe? Pode ser lido? Está no formato
esperado?
• Se a Stream for correspondente a um arquivo
de saída:
– O arquivo pode ser criado? Existe espaço no
disco?
• Se a Stream for correspondente a uma
conexão de rede:
– A conexão foi estabelecida corretamente? Os
dados estão no formato esperado?
3
Conceitos Básicos: Exceções
• Exceções: falhas no processamento que
podem ser de certa forma, previstas.
• Mecanismo de exceções:
– Se uma exceção ocorrer, uma instância de uma
classe correspondente será criada e o
processamento interrompido.
• Em Java:
– Colocamos o trecho do código que pode causar
uma exceção em um bloco try { }
– Colocamos as exceções que podem ser causadas
em um ou mais blocos
catch(Exceção instância) { }
4
Conceitos Básicos: Classes para E/S
• Classes de nível mais alto são criadas a partir
de instâncias de classes de nível mais baixo
BufferedReader
(lê Strings de um
InputStreamReader)
BufferedReader InputStreamReader
(lê Strings de um FileReader) (lê caracteres de uma InputStream)
FileReader InputStream
(lê caracteres de um arquivo) (lê bytes de uma Stream)
5
Exemplo 1: Escrevendo Strings
BufferedWriter bw;
try
{
bw = new BufferedWriter(new FileWriter("x.txt"));
bw.write("Primeira linha de texto");
bw.newLine();
bw.write("Segunda linha de texto");
bw.newLine();
bw.write("Terceira linha de texto");
bw.newLine();
bw.close();
}
catch (IOException e)
{
System.out.println("Erro na gravação !");
}
6
Exemplo 3: Escrevendo Valores Nativos
DataOutputStream dos;
try
{
dos = new DataOutputStream(new FileOutputStream(“tst.dat"));
dos.writeBoolean(true);
dos.writeInt(123456);
dos.writeFloat(3.1416f);
dos.writeUTF("String");
dos.close();
}
catch (IOException e)
{
System.out.println("Erro na gravação !");
}
7
Entrada e Saída de Instâncias
• Armazenamento de instâncias de classes:
persistência
• Mecanismo “manual”: métodos que
armazenam e recuperam os valores de todos
os campos
• Mecanismo automático: serialização
– Basta declarar que a classe a ser armazenada
implementa a interface Serializable
– Algumas classes de Java não são serializáveis
8
Exemplo: Uma Classe Serializável
public String getNome()
{
return nomeCorrentista;
}
try
{
oos =
new ObjectOutputStream(new FileOutputStream("cnt.dat"));
oos.writeObject(c1);
oos.writeObject(c2);
oos.close();
}
catch (IOException e)
{
System.out.println("Erro na gravação !");
}
9
Exemplo 6: Lendo Instâncias
ObjectInputStream ois;
try
{
ois = new ObjectInputStream(new FileInputStream("cnt.dat"));
ContaBancaria ca = (ContaBancaria)ois.readObject();
ContaBancaria cb = (ContaBancaria)ois.readObject();
System.out.println(ca.getNome()+":"+ca.getSaldo());
System.out.println(cb.getNome()+":"+cb.getSaldo());
ois.close();
}
catch (FileNotFoundException e)
{
System.out.println("Arquivo não encontrado !");
}
catch (IOException e)
{
System.out.println("Erro na leitura !");
}
catch (ClassNotFoundException e)
{
System.out.println("Classe para leitura não encontrada !");
}
Programação de Clientes/Servidores
• Estabelecimento de uma conexão cliente-
servidor usando sockets (instâncias da classe
Socket).
• Com a conexão estabelecida, podemos obter
instâncias de InputStream e OutputStream
para fazer a comunicação.
• Com as instâncias de InputStream e
OutputStream podemos fazer envio e
recepção de dados com formatos mais
complexos.
10
Apêndice: Processamento de Tokens
• Token: trecho reconhecível de texto.
• Exemplo: linha de texto Sid Sackson;120000
pode ser “quebrada” usando o caracter ; para
obtermos uma String e um inteiro.
• Aplicações: criação de tabelas simples de
bancos de dados usando arquivos de texto.
• Implementação: a classe StringTokenizer.
– Construtor recebe uma String a ser quebrada e
uma String que contém os separadores.
– Métodos countTokens(), hasMoreTokens() e
nextToken().
11