Ir para o conteúdo

Gestor de Faltas: Gravar Dados

Para podermos aplicar o processo de serialização, neste caso apenas a serialização automática, vamos pegar no projecto que usámos para o capítulo de interfaces gráficas, e completar a funcionalidade da aplicação com a possibilidade de gravar os dados.

Em todas as classes alteramos a declaração para incluir a interface Serializable:

//...
public class Gestor implements Serializable {
    //...
}

//...
public class Aluno implements Serializable {
    //...
}

//...
public class Turma implements Serializable {
    //...
}

Desta forma marcamos as nossas classes como classes que devem ser persistidas. Se alguma das nossas 3 classes não estivesse marcada com a interface correcta, o processo de serialização não iria funcionar. Este é um dos casos mais comuns para problemas em implementar serialização automática ou ajustável.

Os dois métodos mais importantes, e que vão permitir gravar os dados, são adicionados à classe Gestor

public void save(File file) throws FileNotFoundException, IOException {
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
    oos.writeObject(this);
}

public static Gestor load(File file) throws ClassNotFoundException, FileNotFoundException,
        IOException {

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
    Gestor novo = (Gestor) ois.readObject();
    ois.close();

    return novo;
}

No caso do método de leitura optamos por fazer com que o método seja estático e não precise de instâncias para ser usado. Este tipo de implementação pode facilitar o processo de leitura dos dados se a nossa classe for muito complexa, ajudando a que o programador possa, facilmente, ter um objecto pronto sem ter de passar por construtores complicados só para usar um método que depois descarta quaisquer variáveis que tenham sido criadas nos ditos contrutores.

Et voilá, o nosso processo de gravação e leitura está concluído. Como fazemos uso da persistência automática, não precisamos de nos preocupar com mais nada já que, ao invocarmos o método writeObject ou readObject, o mecanismo de serialização do Java vai percorrer todos os atributos do objecto que mandamos gravar, de forma recursiva, e gravar todos os dados na sequência certa.