Erro ao tentar ler arquivo serializado

9 respostas
A
Olá pessoal sou um novo membro do Guj e estudante do 3periodo do curso de sistemas de informação, e como materia de POO2 estamos tendo java, estamos fazendo um projetinho de cadastro de consultas com arquivos serializados, porem estou tendo problemas no metodo de leitura desse arquivo ai vai o código:
public void leRegistros() {
        Consulta record;
        System.out.printf(  "Nome", "Fone" );
        try{// insere os valores do arquivo   
            
                record = ( Consulta ) saida.readObject();// exibe o conteúdo de registro
                
                System.out.printf(record.getNomePaciente() );
            
        } catch ( EOFException endOfFileException ) {
            return; // fim do arquivo foi alcançado
        } catch ( ClassNotFoundException classNotFoundException ) {
            System.err.println( "Não foi possível criar o objeto."
                    );
        } catch ( IOException ioException ) {
            System.err.println( "Erro durante a leitura." );
        }catch (Exception ef){
            JOptionPane.showMessageDialog(null,"Erro: "+ef.getMessage());
        }
    } // fim do método readRecords

ele esta entrando no ultimo catch e exibindo como exception : Erro java.lang.Class alguem poderia me dar uma ajuda nisso abraço a todos!!

9 Respostas

airton.asg

Seria alguma coisa como Class Cast Exception ???
defina melhor seu erro…

LPJava

poe o codigo completo ai!!

A

A unica coisa que a exception me retorna é isso java.lang.Class, ai vai o codigo completo:

RecordSerializable .java

package consultorio;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.ObjectOutput;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.EOFException;
import java .util.*;
import javax.swing.JOptionPane;


public class RecordSerializable implements Serializable{
    
    private  ObjectOutputStream entrada;
    private  ObjectInputStream saida;
    
    public RecordSerializable(){
        
    }
    
    
    public static void geraInfoLog(File Log){
        try {
            FileWriter meuLog = new FileWriter(Log,true);
            PrintWriter saida = new PrintWriter(meuLog,true);
            Date data = new Date(Log.lastModified());
            saida.println("Tamanho do arquivo em bytes : "+Log.length());
            saida.println("Ultima modificação: "+data);
            saida.println(" ");
            saida.close();
            meuLog.close();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Erro ao tentar criar/abrir arquivo de Log"+ e.getMessage());
        }
    }
    
    public static void arqLog(){
        File Log = new File("Log.txt"); ;
        if (!Log.exists()){
            JOptionPane.showMessageDialog(null,"Arquivo de Log não encontrado \n"+
                    "Log será criado no diretorio da aplicação");
        }
        geraInfoLog(Log);
    }
    
    
    public static boolean verificaArquivoSer(){
        boolean retorno = false;
        try {
            File arq = new File("consultorio.ser");
            if (!arq.exists()){
                JOptionPane.showMessageDialog(null,"Arquivo não existe ele sera criado no diretorio da aplicação","Teste de arquivo",1) ;
                
                retorno = false;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Não foi possivel verificar:"+ e.getMessage());
        }
        return retorno;
    }
    
    public  ObjectOutputStream abreArquivoGravacao(){
        try {
            FileOutputStream arq = new FileOutputStream("consultorio.ser");
            ObjectOutputStream entrada = new ObjectOutputStream(arq);
        } catch (IOException e){
            System.err.println("erro abertura de arquivo"+ e.getMessage());
            
        }catch (Exception er){
            JOptionPane.showMessageDialog(null,er.getMessage());
        }
        return entrada;
    }
    
    public void adicionaRegistro(){
        try {
            entrada = new ObjectOutputStream(new FileOutputStream("consultorio.ser"));
            entrada.writeObject(Consulta.class);
            entrada.close();
            JOptionPane.showMessageDialog(null,"registro salvo");
            
        } catch (IOException er) {
            JOptionPane.showMessageDialog(null,"Erro ao adicionar registro:"+ er.getMessage()) ;
        }
    }
    
    public ObjectInputStream abreArquivoLeitura(){
        try {
            saida = new ObjectInputStream(new FileInputStream("consultorio.ser"));
            JOptionPane.showMessageDialog(null,"aberto");
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null,ex.getMessage());
        }
        return saida;
    }
     
    public void closeFile() {
        try // fecha o arquivo e encerra
        {
            if ( saida != null )
                saida.close();
            System.exit( 0 );
        } catch ( IOException ioException ) {
            System.err.println( "Error closing file." );
            System.exit( 1 );
        }
    }
      
    public void leRegistros() {
        Consulta record;
        System.out.printf(  "Nome", "Fone" );
        try{// insere os valores do arquivo
            
            record = ( Consulta ) saida.readObject();// exibe o conteúdo de registro
            
            System.out.printf("%-10s%-12d\n",
                    record.getNomePaciente() );
            
        } catch ( EOFException endOfFileException ) {
            return; // fim do arquivo foi alcançado
        } catch ( ClassNotFoundException classNotFoundException ) {
            System.err.println( "Não foi possível criar o objeto."
                    );
        } catch ( IOException ioException ) {
            System.err.println( "Erro durante a leitura." );
        }catch (Exception ef){
            JOptionPane.showMessageDialog(null,"Erro: "+ef.getMessage());
        }
    } // fim do método readRecords
    
}

test.java

package consultorio;

public static void main(String args[]) {
        RecordSerializable.arqLog();
        if (!RecordSerializable.verificaArquivoSer()){
            RecordSerializable cria = new RecordSerializable();
            cria.abreArquivoGravacao();
        }
        
    }
}
T

Você não deve salvar o objeto “Consulta.class” (cujo tipo é java.lang.Class).

Você tem de salvar um objeto pertencente à classe Consulta.

Consulta consulta = new Consulta();
consulta.set_____ (_____); // preencha os campos da consulta
entrada.writeObject (consulta);

Não faça confusão com nomes de variáveis (pôr um ObjectOutputStream com o nome “entrada” e um ObjectInputStream com o nome “saída” me confundiu um pouco).

A

um entendi, fiz alteração passei como parametro no metodo adicionaRegistro(Consulta con) um objeto da classe consulta mas agora da erro ao gravar o arquivo a IOException retorna
consultorio.Consulta

public void adicionaRegistro(Consulta con){
        try {
            entrada = new ObjectOutputStream(new FileOutputStream("consultorio.ser"));
            entrada.writeObject(con);
            entrada.close();
            JOptionPane.showMessageDialog(null,"registro salvo");
            
        } catch (IOException er) {
            JOptionPane.showMessageDialog(null,"Erro ao adicionar registro:"+ er.getMessage()) ;
        }
    }
o que pode ser agora?
T

Consulta deve implementar a interface java.io.Serializable.

A

Vlew gente agora esta func muito obrigado thingol!!!

T

Só sendo um pouco chato (os velhos costumam ser mais chatos, mas é porque eles sofreram mais :stuck_out_tongue: ).

Ponha nomes significativos em suas variáveis.

Uma variável chamada “entrada” que é um ObjectOutputStream (output = saída) confunde a gente horrores (tanto eu que li seu código quanto você, daqui a alguns dias, vamos ter problemas para entender o código. )

A

ok, obrigado pela dica!!!

Criado 27 de março de 2007
Ultima resposta 27 de mar. de 2007
Respostas 9
Participantes 4