Duvida implmentação Agenda Serializable java.io

Boa tarde, tudo bem?

Sou iniciante em java, e estou tentando fazer uma uma agenda com implements Serializable utilizando JAVA.IO. É para um exercício da faculdade.

Porém estou com uma dúvida de como otimizar o código, pois preciso cadastrar 50 contatos com os atributos “nome”, “email” e “fone” e não consegui fazer utilizando array do objeto da classe “Aluno”.

Se observarem o código no momento da leitura e cadastro estou sempre instanciando um novo objeto , e para 50 contatos vai ficar estranho demais, como estou aprendendo gostaria de saber uma forma melhor de fazer isso.

Alguém pode me dar uma luz nesta situação? Segue código abaixo:

import java.io.*;

class Aluno implements Serializable{

String nome;
String email;
int numero;

public int getNumero(){
	return numero;
}
public void setNumero(int numero){
	this.numero = numero; 
}

public String getEmail(){
	return email;
}

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

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}
}
public class Agenda { // interface Serializable

public static void main (String[] args){
	
	Aluno a = new Aluno();
	a.setNome("Marcio");
	a.setEmail("marcia@email.com.br");
	a.setNumero(9999999);

	Aluno b = new Aluno();
	b.setNome("Alice");
	b.setEmail("alice@email.com.br");

	
	try {
		File arquivo = new File ("C:\\users\\Andrei\\Desktop\\GuardaObjetos.txt");
		
		// Efetua gravação dos objetos no arquivo
		FileOutputStream fOut = new FileOutputStream(arquivo);
		ObjectOutputStream objOut = new ObjectOutputStream(fOut);
		objOut.writeObject(a);
		objOut.writeObject(b);
		
		// Efetua a leitura dos objetos no arquivo
		FileInputStream fIn = new FileInputStream (arquivo);
		ObjectInputStream objIn = new ObjectInputStream(fIn);
		Aluno primeiro = (Aluno) objIn.readObject();
		System.out.println(primeiro.getNome());
		System.out.println(primeiro.getEmail());
		System.out.println(primeiro.getNumero());
		Aluno segundo = (Aluno) objIn.readObject();
		System.out.println(segundo.getNome());
		System.out.println(segundo.getEmail());
		
	}catch (IOException e){
		
	}catch (ClassNotFoundException e){
		
	}
}
}

Você poderia acrescentar uns contrutores na classe Aluno e um método só pra imprimir os dados, assim:

class Aluno implements Serializable {
    /* ... */

    Aluno(String nome, String email) {
        this.nome  = nome;
        this.email = email;
    }

    Aluno(String nome, int numero) {
        this.nome   = nome;
        this.numero = numero;
    }

    Aluno(String nome, String email, int numero) {
        this(nome, email);
        this.numero = numero;
    }    
    
    public void print() {
        System.out.println(this.nome);

        if (this.email  != null) System.out.println(this.email);
        if (this.numero != 0)    System.out.println(this.numero);
    }

    /* ... */
}

E na Agenda ficaria assim:

public class Agenda { // interface Serializable
    public static void main (String[] args){
        List<Aluno> alunos = new ArrayList<>(50);

        alunos.add( new Aluno("Marcio", "marcio@email.com.br", 9999999) );
        alunos.add( new Aluno("Alice", "alice@email.com.br") );
        /* ... */

        try {
            File arquivo = new File ("GuardaObjetos.txt");

            FileOutputStream fOut = new FileOutputStream(arquivo);
            ObjectOutputStream objOut = new ObjectOutputStream(fOut);

            for (Aluno aluno: alunos) {
                objOut.writeObject(aluno);
            }

            FileInputStream fIn = new FileInputStream (arquivo);
            ObjectInputStream objIn = new ObjectInputStream(fIn);

            Aluno aluno;
            while ( ( aluno = (Aluno) objIn.readObject() ) != null ) {
                aluno.print();
            }

        } catch (IOException e){

        } catch (ClassNotFoundException e){

        }
    }
}

É só uma idéia, espero que lhe dê uma luz.

1 curtida

Boa tarde wldomiciano, tudo bem?

Ei implementei aqui e deu tudo certo, e consegui entender melhor o proposito do exercício.

Ainda tenho algumas dificuldade com array, mais ja consegui entender melhor.

Desculpe a demora da resposta mais é que esta meio corrido.

Muito obrigado pelo auxilio!

1 curtida