Java – Persistência de Dados Com Serialização
Depois de algum tempo sem postar artigos devido a falta de tempo aqui está eu de novo e o artigo de hoje será como guardar seus dados sem a necessidade de criar um banco de dados para isso. Vamos lá.
Com a Interface Serializable você pode guardar o estado do seu objeto ou seja se você criar um determinado objeto e atribuir valores a ele e serializar esse objeto, você terá todos os valores do objeto novamente, por exemplo se você criar um ArrayList e adicionar 10 inteiros a ele e serializa-lo, quando você recupera-lo você terá os 10 inteiros novamente não é demais?
Para melhor entendimento criarei uma classe chamada Biblioteca uma vez que vamos simular um sistema simples de biblioteca, essa classe terá um ArrayList ao qual serão guardados os nossos livros e também terá o método main, também criarei uma classe chamada Livro essa classe deve implementar Serializable uma vez que para que possamos serializar uma classe ela deve implementar a interface Serializable, você deverá também fazero o seguinte import “import java.io.Serializable;” essa classe terá uma variável de instância chamada de nome a qual guardaremos o nome de cada livro. Abaixo como ficarão nossas classes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.io.Serializable;
public class Livro implements Serializable {
private String nome;
// no construtor passaremos o nome do livro
public Livro(String nome){
this.nome = nome;
}
// Aqui podemos recuperar o nome do livro
public String getNome(){
return nome;
}
}
public class Biblioteca {
private static ArrayList<Livro> listLivros = new ArrayList<>();
public static void main(String[] args) {
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.io.Serializable; public class Livro implements Serializable { private String nome; // no construtor passaremos o nome do livro public Livro(String nome){ this.nome = nome; } // Aqui podemos recuperar o nome do livro public String getNome(){ return nome; } } public class Biblioteca { private static ArrayList<Livro> listLivros = new ArrayList<>(); public static void main(String[] args) { } } |
Agora precisamos criar os métodos para serializar e carregar nossos dados armazenados, para isso vamos criar um método na classe Biblioteca chamado serializa() que receberá como parâmetro o nome do arquivo e um ArrayList com os livros, como assim o nome do arquivo? quando você quer serializar um objeto você tem que criar um arquivo cuja extensão você escolhe, eu gosto de criar o arquivo com a extensão .ser (serializavel), enfim pode ser qualquer uma, voltando ao raciocínio depois de criar este arquivo.ser você vai gravar seus dados nele. Vejamos o método serializa():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // O método serializa recebe dois parametros o primeiro é o nome do arquivo //que vamos salvar como se fosse um bloco de notas (obs você pode colocar qualquer extensão // no nosso caso a extensão é .ser) public static void serializa(String arquivo,ArrayList<Livro> livros){ try { //criamos um objeto FileOutputStream que receberá uma String com o nome do //arquivo FileOutputStream fos = new FileOutputStream(arquivo); ObjectOutputStream oos = new ObjectOutputStream(fos); //pegamos o ObjectOutputStream para escrever com o método writeObject // e passamos o nosso ArrayList Como argumento oos.writeObject(livros); // Em seguida fechamos ambos arquivos fos.close(); oos.close(); } catch (Exception e) { e.printStackTrace(); } } |
Agora que já criamos o método serializa() precisamos de um método que recupere nossos dados para isso criaremos na classe Biblioteca o método load() que receberá como parâmetro o nome do arquivo (no nosso caso arquivo.ser) lembrando que na hora de recuperar nossos dados o nome do arquivo deve ter o mesmo nome e a mesma extensão que você deu ao seu arquivo, veja como ficará nosso método load():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public static ArrayList<Livro> load(String arquivo){ // crie um ArrayList de Livro para depois retorna-lo //com os dados recuperados do seu arquivo ArrayList<Livro> lista = new ArrayList<>(); try { // Crie um objeto do tipo FileInputStream e passe como //parametro o nome do arquivo com a mesma extensao FileInputStream fis = new FileInputStream(arquivo); // crie um objeto do tipo ObjectInputStream passando como //parametro o FileInputStream que você criou ObjectInputStream ois = new ObjectInputStream(fis); // atribua a sua lista de Livros os dados recuperados //apartir do método readObject() do ObjectInputStream lista = (ArrayList<Livro>) ois.readObject(); //Feche fis.close(); ois.close(); } catch (Exception e) { e.printStackTrace(); } //retorne o ArrayList com os dados atualizados return lista; } |
Agora vamos testar nossa pequena aplicação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Biblioteca { private static ArrayList<Livro> listLivros = new ArrayList<>(); public static void main(String[] args) { //Aqui eu crio três livros Livro lv1 = new Livro("Head First – Java"); Livro lv2 = new Livro("Head First – Python"); Livro lv3 = new Livro("Head First – Mysql"); // Adiciono os livros na minha listLivros listLivros.add(lv1); listLivros.add(lv2); listLivros.add(lv3); //Aqui eu gravo (serializo) meus dados no arquivo livro.ser serializa("livro.ser", listLivros); // Recupero todos o ArrayList e percorro ele com um for for (Livro livr : load("livro.ser")) { //imprimo cada item na tela System.out.println(livr.getNome()); }; } |
Nenhum comentário:
Postar um comentário