1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problemas com registo e leitura de Dados em ficheiro binário

Discussão em 'Programação' iniciada por Tiago Correia, 1 de Julho de 2008. (Respostas: 3; Visualizações: 601)

  1. Olá a todos [​IMG]
    Tenho uma superclasse ADT constituida por várias classes (Msh, piv, pac, evn). Cada novo paciente implica que seja preenchida a superclasse ADT, ou seja cada paciente tem os seus proprios dados e consequentemente um ADT diferente. contudo quero guardar todos os ADTs num ficheiro binário. O problema é que adicionando um novo paciente o registo ADT do paciente anterior é eliminado. Além disso como tentei colocar os dados ADT do paciente num vector, quando quero lelos ele dá uma erro que é:"java.lang.ClassCastException: java.util.Vector cannot be cast to ADT"
    para me melhor compreensão do meu codico, coloqueio em todo em anexos. aqui enconta-se a fração que axo necessário neste momento....

    Alguem me pode ajudar? [​IMG]

    Agradecia mesmo muito muito....
    Muito obrigado pela atenção [​IMG]


    Código:
    public class accoes { 
    
    (........) 
    
    static void apresentardados(ADT a){ 
    geral.limparEcra(); 
    System.out.println("Dados do Paciente"); 
    System.out.println(""); 
    System.out.println("Numero do Paciente: "+a.PAC.id+""); 
    System.out.println("Data da admissão: "+a.M.AR.dia+"/"+a.M.AR.mes+"/"+a.M.AR.ano+ "as" +a.M.AR.hora+":"+a.M.AR.min+""); 
    System.out.println("Nome: " +a.PAC.nome+""); 
    System.out.println("BI: "+a.PAC.bi+""); 
    System.out.println("Sexo: "+a.PAC.sexo+""); 
    System.out.println("Local de Nascimento: "+a.PAC.localNascimento+""); 
    System.out.println("Data de Nascimento: "+a.PAC.nasc.dia+"/"+a.PAC.nasc.mes+"/"+a.PAC.nasc.ano+""); 
    System.out.println("Morada" +a.PAC.moradaLugar+" " +a.PAC.moradaConcelho+" "+a.PAC.moradaDistrito+""); 
    System.out.println("Codico Postal: " +a.PAC.codPostal+""); 
    System.out.println("Contacto"); 
    System.out.println("Telemovel: "+a.PAC.telemovel+" / Telefone: "+a.PAC.telefone+""); 
    System.out.println("Estado Civil: " +a.PAC.estadoCivil+""); 
    System.out.println("Codico do evento a realizar: " +a.E.codEvento+""); 
    System.out.println("Data da consulta a realizar: " +a.E.EC.dia+"/"+a.E.EC.mes+"/"+a.E.EC.ano+" as "+a.E.EC.hora+"/"+a.E.EC.min+""); 
    System.out.println("Medico da consulta: "+a.P.nomeMedico+" "+a.P.apelidoMedico+""); 
    System.out.println("Localizacao"); 
    System.out.println("Servico "+a.P.servico+" da unidade "+a.P.unidade+" com o quarto "+a.P.quarto+" e cama "+a.P.cama+""); 
    
    
    } 
    
    static void registarPaciente1() { 
    String ficheiro="HL8.dat"; 
    int id=6; 
    ADT a = leDadosPaciente(id); 
    a.PAC.id=id; 
    
    Vector<ADT> pacientes = new Vector<ADT>(); 
    try { 
    pacientes.add(a); 
    FileOutputStream fos =new FileOutputStream(ficheiro); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(pacientes); 
    oos.close(); 
    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    geral.limparEcra(); 
    } 
    
    
    static ADT leDadosPaciente(int id){ 
    
    MSH msh = MSH.preencheMSH(); 
    Paciente PAC = Paciente.preenchePaciente(id); 
    EVN evento = EVN.preencheEvento(); 
    PIV piv = PIV.preenchePIV(); 
    ADT a = new ADT(msh, evento, PAC, piv); 
    return a; 
    } 
    
    static void listarPaciente() { 
    ADT a; 
    String ficheiro="HL8.dat"; 
    Vector<ADT> pacientes = new Vector<ADT>(); 
    try { 
    FileInputStream fis = new FileInputStream(ficheiro); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    ADT f = (ADT) ois.readObject(); 
    while(f != null){ 
    pacientes.addElement(f); 
    f = (ADT) ois.readObject(); 
    apresentardados(f); 
    } 
    ois.close(); 
    } 
    catch (Exception e) { e.printStackTrace(); 
    } 
    } 
    
     
    
     
  2. nasic

    nasic Power Member

    Penso que o q tu queiras é isto:
    FileOutputStream fos = new FileOutputStream (<o file>, true)

    O 2º parâmetro decide se queres fazer append ou não.
     
  3. Olá
    Quando faço o um novo append ao meu objecto que é a classe ADT, ele escreve numa nova linha do ficheiro binário?

    Depois, quando quiser ler o objecto como vou posicionar no ficheiro binário para ler os vários objectos que tenho?

    Obrigado pela atenção
     
  4. nasic

    nasic Power Member

    Podes carregar todo o ficheiro por exemplo, e dps usares apenas aquilo que queres.
    Deixo-te uma sugestão:
    pq não gravar um arraylist de objectos em vez de objecto a objecto?
     

Partilhar esta Página