Olá pessoal,
Bom, não estou conseguindo gravar um ObjectOutputStream em um arquivo sequencial. Estou usando a seguinte instrução para criar o arquivo:
try {
objetoEscrita = new ObjectOutputStream( new FileOutputStream( caminhoArquivo ) ); // caminhoArquivo já contém o caminho do arquivo a ser criado.
…
}
catch ( IOException ioException ) {
…
}
E para gravar meu objeto as instruções a seguir:
try{
objetoEscrita.writeObject( conta );
…
}
catch ( … ) {
…
}
Onde conta é um objeto do tipo Conta que implementa a interface Serializable.
Estas operações estão sendo feitas dentro de uma classe que herda de JInternalFrame.
Quando rodo o debug do Eclipse e ponho um breakpoint na linha em que é instanciado o ObjectOutputStream tenho a mensagem que a instrução ‘ObjectOutputStream( new FileOutputStream( caminhoArquivo ) )’ não é uma operação de JInternalFrame válida, porém não é disparada nenhuma exceção. Assim meu objetoEscrita fica nulo.
Espero alguma resposta… desde já agradecido!
Pablo
Ainda não entendi porque usar a classe JInternalFrame
. Existe uma forma bastante simples de resolver o seu problema. Pelo que entendi você quer carregar e descarregar objetos usando streams.
Em primeiro lugar esses objetos devem ser serializáveis. Por isso, você deve implementar a interface Serializable. Ela não tem nenhuma operação, mas vai pedir a você que implemente os métodos obrigatórios writeObject(ObjectOutPutStream out) e readObject(ObjectInputStream in). Neles você descreve como proceder para enviar ou receber os valores das propriedades do objeto através dos streams.
É bem fácil, se você quiser eu posso enviar o código de exemplo que eu tenho por e-mail. 
Ok! Eu já havia implementado Serializable em minha classe… e os métodos writeObject( nomeDoObjeto ) e readObject( nomeDoObjeto ) não são necessáriamente obrigatórios para se ler objetos com ObjectInputStream nem para escrever objetos com ObjectOutputStream. Eu estou conseguindo escrever objetos em meu arquivo. O problema está na hora da leitura. Quando uso “conta = ( Conta ) objetoLeitura.readObject( )” meu objeto conta fica em um estado inconsistente. Assim quando vou ler meu arquivo tenho um EOFException. Mas acho que vou fazer meu programa com RandomAccessFile mesmo…
Valeu!
Pablo
Você quem sabe cara. Só toma cuidado porque você tem que ler as propriedades na mesma ordem em que gravou, senão vai dar erro mesmo :roll: ! E também não seria o próprio objeto “conta” que implementa a função de se ler, ou gravar?
Eu estou lendo sim… estou gravando objetos e lendo sequencialmente. Enquanto ao objeto Conta ler… Pode ser… como tb pode não ser. A classe ObjectInputStream possui o método readObject(nomeDoObjetoASerLido)… ae tanto faz eu usar este com uma referência para o arquivo a ser lido como implementar um no próprio objeto. :roll: Valeu!
Pablo
Beleza então
. O que eu faco acho que você já sabe, eu sei que não tem erro! Posso ler objetos em qualquer formato, geralmente eu uso byte ou bytearray (o formato universal
). Espero ter ajudado e espero que também me ajude nas dúvidas que provavelmente vão surgir.
Abraco
!