Dúvida em Leitura de Objetos com ObjectOutputStream

6 respostas
adrianostanley

Infelizmente preciso ler os dados de uma aplicação a partir de um arquivo sendo que estou utilizando ObjectInputStream e ObjectOutputStream.

Como faço para que no momento da gravação, eu posicione o “ponteiro” no ultimo registro para que ele não substitua os registros já adicionados no arquivo?

E como é feita a leitura de todos os registros presentes no arquivo??
Visto que não encontrei um método que leia todos os objetos…

Abraços,
Adriano

6 Respostas

Marky.Vasconcelos

Uma solução é gravar uma ArrayList do objeto que voce quer no arquivo, e na hora de gravar um objeto, carregar a ArrayList, adicionar o objeto e gravar denovo.

Isso também ajudaria a carregar todos os objetos de uma vez.

Rafael_Nunes

Você tá criando o ObjectOutputStream utilizando um FileOutputStream para gravação?

Se sim, basta chamar o construtor de FileOutputStream que recebe um boolean no construtor:

FileOutputStream(String file, boolean append)

Passando o append como ‘true’, ele adicionara o que for escrito ao final do arquivo caso ele já exista.

Marky.Vasconcelos

A solução com o ArrayList ajudaria a carregar todos os objetos

adrianostanley

Gostei da idéia do ArrayList… faz sentido…
Mas isso:

(ArrayList<Annotation>)input.readObject();

Gera uma EOFException… imagino que seria um End of File Exception??

Marky.Vasconcelos

Na API

public class EOFException
extends IOException

Signals that an end of file or end of stream has been reached unexpectedly during input.

This exception is mainly used by data input streams to signal end of stream. Note that many other input operations return a special value on end of stream rather than throwing an exception.

Se voce for gravar a ArrayList é melhor não deixar o FileOutputStream escrevendo depois do que já tem no arquivo, no segundo parametro deixe false.

E talvez se você colocar o código fica mais fáçil ajudar.

adrianostanley

Tranquilo cara, funcionou aqui.
Muito obrigado,
Adriano

Criado 12 de fevereiro de 2008
Ultima resposta 13 de fev. de 2008
Respostas 6
Participantes 3