Pessoal quando vou ler um arquivo de objetos, o primeiro eh lido normalmente, soh q qdo o loop volta(repeti) ocorre esse erro “invalid type code: AC” e nao le o objeto…
}}catch(EOFExceptionex){JOptionPane.showMessageDialog(null,“FimdoArquivo”+ex.getMessage());}catch(ClassNotFoundExceptionex){JOptionPane.showMessageDialog(null,"Nao foi possivel carregar o Objeto "+ex.getMessage());}catch(IOExceptionerro){JOptionPane.showMessageDialog(null,erro.getMessage());}
jtTexto.setText(buffer.toString());try{
in.close();
}catch(IOExceptionex){
JOptionPane.showMessageDialog(null,"Erro no Ecenerramento do Arquivo "+ex.getMessage());
}
}
o objeto que vc coloca no txt é Serializable e como você esta salvando no arquivo ?
T
tupetao_89
eh Serializable sim… estou salvando com o ObjectOutputStream, está salvando corretamente, o problema eh na hora de carregar do arquivo
M
Marky.Vasconcelos
Mas como voce salva varios?
Só vai jogando no arquivo?
Acho que a melhor opção seria salvar uma ArrayList e para ler a mesma coisa.
T
tupetao_89
To salvando num ArrayList e depois mando pro aqruivo num ‘‘for’’, um objeto de cada vez…
Qdo carrego faço o processo inverso… pego do arquivo e vou jogando na lista, mas soh pega o primeiro e da o msm erro
T
thingol
Você não pode usar um ObjectInputStream/ObjectOutputStream em um arquivo texto (ou seja, aberto com FileWriter/FileReader). O arquivo tem de ser binário (aberto com FileInputStream/FileOutputStream. ).
M
Marky.Vasconcelos
Esse é o problema… mande gravar a lista invés de iterar e gravar cada objeto.
Lista é serializavel então voce pode mandar ela com objetos serializaveis.
@thingol
Ele já esta abrindo com o FileImputStream.
T
tupetao_89
thingol:
Você não pode usar um ObjectInputStream/ObjectOutputStream em um arquivo texto (ou seja, aberto com FileWriter/FileReader). O arquivo tem de ser binário (aberto com FileInputStream/FileOutputStream. ).
ja to abrindo com FileInputStream, o arquivo eh TXT, mas isso realmente influencia?? testei com .DAT e ocorreu a msm coisa…
Mark_Ameba
Vou testar o q vc disse!!!
Obrigado a todos pelas respostas, se alguém tiver mais idéias, podem lança-lás!!!
T
thingol
Como é que esses objetos foram gravados? Se por algum motivo esses objetos foram gravados em um arquivo-texto (usando FileWriter ou coisa parecida) então um abraço, porque foram corrompidos.
T
tupetao_89
Bom, para gravar to usando ‘‘ObjectOutputStream arquivo = new ObjectOutputStream(new FileOutputStream(new File(nome_arq),true));’’… se está errado qual a maneira correta para não corromper?
T
tupetao_89
Fonte do método de inserção… insiro primeiro na lista depois passo p arquivo…
publicvoidadd_lista(){CadCanaiscanal=newCadCanais();if(jtNome.getText().equals("")||jtNumero.getText().equals("")||jtFiliacao.getText().equals("")){JOptionPane.showMessageDialog(null,"Por favor, preencha todos os campos!!");}else{canal.setNome(jtNome.getText());try{canal.setNumero(Integer.parseInt(jtNumero.getText()));}catch(NumberFormatExceptionex){JOptionPane.showMessageDialog(null,"Formato de número errado!!");}canal.setFiliacao(jtFiliacao.getText());canal.setFlag('x');System.out.println("ok");telaprincipal.canais.add(canal);System.out.println("ok");grava_arq();dispose();}}publicvoidgrava_arq(){try{ObjectOutputStreamarquivo=newObjectOutputStream(newFileOutputStream(newFile(nome_arq),true));for(inti=0;i<telaprincipal.canais.size();i++){arquivo.writeObject(telaprincipal.canais.get(i));System.out.println(telaprincipal.canais.get(i).getNome());}arquivo.flush();arquivo.close();}catch(IOExceptionex){JOptionPane.showMessageDialog(null,ex.getMessage());}System.out.println("ok");}
Realmente resolvi usando um ArrayList, ou seja, no arquivo gravo somente o array e nao cada posição separada… para ler a msm coisa carrego o array e pronto fica blz!!!
Obrigado a todos pelas dicas, se alguém tiver mais a acrescentar fique avontade!!!
M
Marky.Vasconcelos
Se voce quisesse edita-los manualmente voce poderia usar o JFileHelper que é legal para se trabalhar com dados em arquivo texto com tamanho predefenidos de colunas ou então com delimitadores.
Outra opção seria usar uma API como o XStream para salvar em XML a lista.
T
tupetao_89
Mark_Ameba:
Se voce quisesse edita-los manualmente voce poderia usar o JFileHelper que é legal para se trabalhar com dados em arquivo texto com tamanho predefenidos de colunas ou então com delimitadores.