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
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.
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.
A solução com o ArrayList ajudaria a carregar todos os objetos
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??
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.
Tranquilo cara, funcionou aqui.
Muito obrigado,
Adriano