How to display data from a serialized file in Java?

5

I'm starting in Java and need to make a system that registers students and saves the data of those students in a serialized file.

I can even create and save the data in the serialized file (I think rsrs) but I do not know how to display all this data on the screen (later I will need to delete and edit this saved data but at the moment I want to focus only on displaying them). Could someone help me with this problem? I will display the data in a JTable.

Student Class where it adds

public class Estudante implements Serializable {

    private String id;
    private String nome;
    private String sexo;
    private String dataNasc;
    private String rg;
    private String cpf;
    private String celular;
    private String telefone;
    private String email;
    private String end;
    private String bairro;
    private String cidade;
    private String cep;
    private String uf;
    private String num;

    public String getId() { //retorna o id
        return id;
    }

    public void setId(String id) { //recebe o id
        this.id = id;
    }

    public String getNome() { //retorna o nome
        return nome;
    }

    public void setNome(String nome) { //recebe o nome
        this.nome = nome;
    }

    public String getSexo() { //retorna o sexo
        return sexo;
    }

    public void setSexo(String sexo) { //recebe o sexo
        this.sexo = sexo;
    }

    public String getDataNasc() { //retorna a data de nascimento
        return dataNasc;
    }

    public void setDataNasc(String dataNasc) { //recebe a data de nascimento
        this.dataNasc = dataNasc;
    }

    public String getRg() { //retorna o rg
        return rg;
    }

    public void setRg(String rg) { //recebe o rg
        this.rg = rg;
    }

    public String getCpf() { //retorna o cpf
        return cpf;
    }

    public void setCpf(String cpf) { //recebe o cpf
        this.cpf = cpf;
    }

    public String getCelular() { //retorna o celular
        return celular;
    }

    public void setCelular(String celular) { //recebe o celular
        this.celular = celular;
    }

    public String getTelefone() { //retorna o telefone
        return telefone;
    }

    public void setTelefone(String telefone) { //recebe o telefone
        this.telefone = telefone;
    }

    public String getEmail() { //retorna o email
        return email;
    }

    public void setEmail(String email) { //recebe o email
        this.email = email;
    }

    public String getEnd() { //retorna o endereço
        return end;
    }

    public void setEnd(String end) { //recebe o endereço
        this.end = end;
    }

    public String getBairro() { //retorna o bairro
        return bairro;
    }

    public void setBairro(String bairro) { //recebe o bairro
        this.bairro = bairro;
    }

    public String getCidade() { //retorna a cidade
        return cidade;
    }

    public void setCidade(String cidade) { //recebe a cidade
        this.cidade = cidade;
    }

    public String getCep() { //retorna o cep
        return cep;
    }

    public void setCep(String cep) { //recebe o cep
        this.cep = cep;
    }

    public String getUf() { //retorna o uf
        return uf;
    }

    public void setUf(String uf) { //recebe o uf
        this.uf = uf;
    }

    public String getNum() { //retorna o numero
        return num;
    }

    public void setNum(String num) { //recebe o numero
        this.num = num;
    }
}

Customers Class where you add and display students

public class Clientes implements Serializable {


    public boolean adiciona(Estudante estudante) {
         try {
             FileOutputStream saveFile = new FileOutputStream("estudantes.txt", true);
             ObjectOutputStream stream = new ObjectOutputStream(saveFile);

              // salva o objeto
             stream.writeObject(estudante);
             stream.writeObject(System.getProperty ("line.separator"));

             saveFile.close();
             stream.close();

             return true;
           } catch (Exception exc) {
             exc.printStackTrace();
           }

         return false;
    }

    public void exibe(){
        Estudante estudantes = null;

        try{
            FileInputStream fin = new FileInputStream("estudantes.txt");
            ObjectInputStream ois = new ObjectInputStream(fin);

            estudantes = (Estudante) ois.readObject();

            //System.out.println(estudantes.getNome());

            ois.close();

       }catch(Exception ex){
        ex.printStackTrace(); 
       } 
   }
}

Main screen that receives the data

  String nome = edtNome.getText(); //variavel 'nome' recebe o que estiver no campo de texto Edit
  String sexo = (String) edtSexo.getSelectedItem(); //variavel 'sexo' recebe o que estiver no campo de texto Edit
  String dataNasc = edtdataNasc.getText(); //variavel 'dataNasc' recebe o que estiver no campo de texto Edit
  String cpf = edtCpf.getText(); //variavel 'cpf' recebe o que estiver no campo de texto Edit
  String rg = edtRg.getText(); //variavel 'rg' recebe o que estiver no campo de texto Edit
  String celular = edtCelular.getText(); //variavel 'celular' recebe o que estiver no campo de texto Edit
  String telefone = edtTelefone.getText(); //variavel 'telefone' recebe o que estiver no campo de texto Edit
  String email = edtEmail.getText(); //variavel 'email' recebe o que estiver no campo de texto Edit
  String end = edtEnd.getText(); //variavel 'end' recebe o que estiver no campo de texto Edit
  String bairro = edtBairro.getText(); //variavel 'bairro' recebe o que estiver no campo de texto Edit
  String cidade = edtCidade.getText(); //variavel 'cidade' recebe o que estiver no campo de texto Edit
  String cep = edtCep.getText(); //variavel 'cep' recebe o que estiver no campo de texto Edit
  String uf = (String) edtUf.getSelectedItem(); //variavel 'uf' recebe o que estiver no campo de texto Edit
  String num = edtNum.getText(); //variavel 'num' recebe o que estiver no campo de texto Edit

  estudante.setId(id);
  estudante.setBairro(bairro); //envia a variavel 'bairro' para o respectivo set da classe Estudante
  estudante.setCelular(celular); //envia a variavel 'celular' para o respectivo set da classe Estudante
  estudante.setCep(cep); //envia a variavel 'cep' para o respectivo set da classe Estudante
  estudante.setNome(nome); //envia a variavel 'nome' para o respectivo set da classe Estudante
  estudante.setSexo(sexo); //envia a variavel 'sexo' para o respectivo set da classe Estudante
  estudante.setCidade(cidade); //envia a variavel 'cidade' para o respectivo set da classe Estudante
  estudante.setDataNasc(dataNasc); //envia a variavel 'dataNasc' para o respectivo set da classe Estudante
  estudante.setCpf(cpf); //envia a variavel 'cpf' para o respectivo set da classe Estudante
  estudante.setEmail(email); //envia a variavel 'email' para o respectivo set da classe Estudante
  estudante.setRg(rg); //envia a variavel 'rg' para o respectivo set da classe Estudante
  estudante.setEnd(end); //envia a variavel 'end' para o respectivo set da classe Estudante
  estudante.setUf(uf); //envia a variavel 'uf' para o respectivo set da classe Estudante
  estudante.setTelefone(telefone); //envia a variavel 'telefone' para o respectivo set da classe Estudante
  estudante.setNum(num); //envia a variavel 'nm' para o respectivo set da classe Estudante

  Clientes cliente = new Clientes();

  if(cliente.adiciona(estudante)==true){ //chama o método addEstudante da classe Estudante
    JOptionPane.showMessageDialog(null,"Estudante cadastrado com sucesso!");
  }
} catch (Exception ex){
  JOptionPane.showMessageDialog(null,"Erro ao cadastrar o estudante!");
  Logger.getLogger(cadEstudante.class.getName()).log(Level.SEVERE, null, ex); //retorna erro
}
    
asked by anonymous 01.11.2017 / 21:35

1 answer

0

Hello Friend if you serialized the object and persisted it in a file or in a database with a array of bytes , the correct one for it to be displayed needs to be deserialized. The below I will put the form that I use to accomplish this two tasks and I recommend that you use try-resources so that the resources are properly closed without headache or concern.

Serialization:

    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ObjectOutputStream oos = new ObjectOutputStream(baos)){

         oos.writeObject(instancia);           
         byte [] arquivoSerializado = baos.toByteArray();           

    } catch (IOException ex) {
        ex.printStackTrace();
    }

Unlike yours, I persist in a database so I transform it into a array of bytes .

Deserialization:

    try (ByteArrayInputStream bais = new ByteArrayInputStream(registro_logs.getObjeto().getObjeto()); 
            ObjectInputStream ois = new ObjectInputStream(bais)) {

        TransportadoraContainer container = (TransportadoraContainer) ois.readObject();

    } catch (IOException | ClassNotFoundException | Relatorio_Exception ex) {
        LOG.error(ex);
    } catch (NullPointerException exception) {
        Utils.painelDeMensagens("Não Existe Arquivo para este log", JOptionPane.WARNING_MESSAGE);
    }

After the object has been deserialized, I assign it to the variable container and from here and only use the object as I need it.

    
03.11.2017 / 18:12