Dificuldade em gravar num ficheiro de dados

1 resposta
X

Boas

Tenho um projeto que estou a desenvolver em java e tenho uma duvida no registo de utilizadores, acontece o seguinte tenho 3 utilizadores (docente, funcionario e aluno), tenho que fazer o resgisto destes 3 utilizadores com o username, password e tipo de utilizador (docente, funcionario e aluno) mas acontece que eu não estou a conseguir gravar para ficheiro n sei o que estou a fazer mal e gostaria que alguem me ajudasse, a lista fica sempre vazia e não grava, ja tentei de diversas formas e não sei mais o que fazer, peço desculpa mas eu não percebo mto de programação e tenho que fazer este projeto para terminar o curso, se me poderem dizer o que tenho mal e me mostrarem o que deveria mudar e meter bem agradecia, ja tentei de diversas formas e não esta a dar.

//classe Escola com o main

import java.io.*;import java.util.*;


public class Escola
{
  public static void main(String[] args) throws IOException, FileNotFoundException, ClassNotFoundException {


    //criação de objecto
        
    Ficheiro f = new Ficheiro();
    Menu m = new Menu();
                
    f.LeUtilizadores();
                       
    //entrada no menu
        m.menuInicio();     
  }
}
//Classe GereEscola onde esta o metodo registo de utilizadores

import java.io.*;
import java.util.*;

public class GereEscola
{
   List<Utilizadores> lista = new ArrayList<Utilizadores>(); 
    
   // verifica se existe utilizador
   public boolean existeLista(String user) {
        for (Utilizadores utilizador : lista) {
            if (utilizador.getUser().equals(user)) {
                return true;
            }
        }
        return false;
   }
   
   // registo de utilizadores
   public void registo() throws IOException
   {
      // List<Utilizadores> lista = new ArrayList<Utilizadores>(); 
       String user, pass;
       int tipo,x;
       
       System.out.println("************* REGISTO **************");
       System.out.println("USERNAME: ");
       user= Leitura.LeString();
       System.out.println("PASSWORD: ");
       pass= Leitura.LeString();
       
       System.out.println("************* QUAL O TIPO DE UIILIZADOR **************");
       System.out.println("*********  Escolha uma das seguintes opções  *********");
       System.out.println("*********           1 - Docente              *********");
       System.out.println("*********           2 - Aluno                *********");
       System.out.println("*********           3 - Funcionario          *********");
       System.out.println("*********           4 - Voltar               *********");
       System.out.println("*                                                    *");
       System.out.println("******************************************************");
       x=Leitura.LeInt();
       switch (x) {
       case 1: 
            //tentei desta forma
            if(user!= null && !user.isEmpty() && !existeLista(user)){
                lista.add(new Utilizadores(user,pass,1));
                Ficheiro f = new Ficheiro();
                f.GravaUtilizadoresFicheiro(lista);
                System.out.println("Docente registado");
            }else{
                System.out.println("O utilizador com o username "+user+" já existe");
            }
            break;
       case 2:
            //e desta forma
            lista.add(new Utilizadores(user,pass,2));
            for(Utilizadores utilizador : lista)
                if(utilizador.getUser() == null ) {
                    Ficheiro f = new Ficheiro();
                    f.GravaUtilizadoresFicheiro(lista);
                    System.out.println("Docente registado");
                }else{
                    System.out.println("O utilizador com o username "+user+" já existe");
            }
            break;
      }
}
//classe Ficheiro

import java.io.*;import java.util.*;

public class Ficheiro 
{
    // utilizadores
   public void GravaUtilizadoresFicheiro(List<Utilizadores> lista) throws IOException{
        
        File file = new File("users.dat");
        
        try {
           
            if (!file.exists()) {
                //cria um ficheiro (vazio)
                file.createNewFile();
            }


            FileOutputStream os = new FileOutputStream(new File("users.dat"));
            ObjectOutputStream oos = new ObjectOutputStream(os);
        
            oos.writeObject(lista);
            oos.flush(); 
            oos.close();
            
       } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void LeUtilizadores() throws FileNotFoundException, IOException, ClassNotFoundException{


        ArrayList <Utilizadores> lista = new ArrayList <Utilizadores>();
        Utilizadores temp;
        try {
            ObjectInputStream in = new ObjectInputStream( new FileInputStream ("users.dat"));
            while ((temp=(Utilizadores)in.readObject()) !=null){
                lista.add(temp);
            }
            in.close();
        }
        catch(FileNotFoundException ex1) {
            System.out.println(ex1.getMessage());
        }
        
        catch(EOFException ex2) {
            System.out.println("End Of File");
        }


        catch(IOException ex3) {
            System.out.println(ex3.getMessage());
        }
        
        catch(ClassNotFoundException ex4) {
            System.out.println(ex4.getMessage());
        }
        System.out.println("*** Lista de Utilizadores ***");
        for(Utilizadores users : lista)
            System.out.println(users.getUser()+", "+users.getPass()+", "+users.getTipo());
    }
}
//classe Leitura para ler os dados do teclado

import java.io.*;

public class Leitura
{
    public static String LeString() 
    { 
        String str = ""; 
        boolean ok = false;
        
        InputStreamReader stdin = new InputStreamReader(System.in); 
        BufferedReader linhastr = new BufferedReader(stdin); 


        while (!ok){
        try{
            str = linhastr.readLine();
            ok=true;
        }catch(IOException eio){
            System.out.println("Dado invalido volte a introduzir por favor:");
        }catch(Exception e){
            System.out.println("Dado invalido volte a introduzir por favor:");
        }
    }         
        return str;
    }


    public static int LeInt() 
    { 
        int i=0;
        String str = ""; 
        boolean ok = false;


        InputStreamReader stdin = new InputStreamReader(System.in); 
        BufferedReader linhastr = new BufferedReader(stdin); 
        
        while (!ok){
        try{
            str = linhastr.readLine();
            i = Integer.parseInt(str);
            ok=true;
        }catch(IOException eio){
            System.out.println("Dado invalido volte a introduzir por favor:");
        }catch(Exception e){
            System.out.println("Dado invalido volte a introduzir por favor:");
        }
        }
        return i;
    }
}
//Classe utilizadores

import java.io.*;import java.util.*;


public class Utilizadores
{
    private String user, pass;
    private int tipo;


    public Utilizadores() 
    {
        user="";
        pass="";
        tipo=0;
    }


    public Utilizadores(String user, String pass, int tipo) 
    {
        this.user=user;
        this.pass=pass;
        this.tipo=tipo;
    }
    
    public void setUser(String user) { this.user = user; }
    public void setPassword(String pass) { this.pass = pass; }
    
    public String getUser() { return user;}
    public String getPass() { return pass;}
    
    public int getTipo() { return tipo; }


    public boolean equals(String user, String pass) {
        if (user.equals(this.user) && pass.equals(this.pass))
            return true;


        return false;
    }
}
//classe aluno

import java.io.*;
import java.util.*;


public class Aluno extends Utilizadores implements Serializable
{
    private String nome;
    private int numero;
    private int BI;
    private int NIF;
    private String data_nasc;


    /**
     * Constructor for objects of class Funcionario
     */
    public Aluno()
    {
        super();
        nome="";
        numero=0;
        BI=0;
        NIF=0;
        data_nasc="";
    }
    
    public Aluno(String nome, int numero, String data_nasc, int BI, int NIF, String user, String pass, int tipo)
    {
        super(user,pass,tipo);
        this.nome=nome;
        this.numero=numero;
        this.BI=BI;
        this.NIF=NIF;
        this.data_nasc=data_nasc;
    }


    // setters
    public void setNome() { this.nome=nome;}
    public void setNumero() { this.numero=numero;}
    public void setBi(int BI) { this.BI=BI;}
    public void setNif(int NIF) { this.NIF=NIF;}
    public void setData_Nasc(String data_nasc) { this.data_nasc=data_nasc;}


    // getters
    public String getNome() { return nome;}
    public int getNumero() { return numero;}
    public int getBi() { return BI;} 
    public int getNif() { return NIF;}
    public String getData_Nasc() { return data_nasc;}
    
    public void mostra_aluno()
    {
        System.out.println("*************ALUNO**************");
        System.out.println("NOME:"+nome);
        System.out.println("IDADE:"+data_nasc);
        System.out.println("NIF:"+NIF);
        System.out.println("BI:"+BI);
    }
    
}
// funcionario

import java.io.*;
import java.util.*;


public class Funcionario extends Utilizadores
{
    private String nome, data_nasc;
    private int NIF, BI;
    
    /**
     * Constructor for objects of class Funcionario
     */
    public Funcionario()
    {
        super();
        nome="";
        data_nasc="";
        NIF=0;
        BI=0;
    }
    
    public Funcionario(String nome, String data_nasc, int BI, int NIF, String user, String pass, int tipo)
    {
        super(user,pass,tipo);
        this.nome=nome;
        this.data_nasc=data_nasc;
        this.NIF=NIF;
        this.BI=BI;
    }


    // setters
    public void setNome(String nome) { this.nome=nome;}
    public void setData_Nasc(String data_nasc) { this.data_nasc=data_nasc;}
    public void setNIF(int NIF) { this.NIF=NIF;}
    public void setBI(int BI) { this.BI=BI;}
    
    // getters
    public String getNome() { return nome;}
    public String getData_Nasc() { return data_nasc;}
    public int getNIF() { return NIF;}
    public int getBI() { return BI;}
    
    public void mostra_funcionario()
    {
        System.out.println("*************Funcionarios**************");
        System.out.println("Nome:"+nome);
        System.out.println("Idade:"+data_nasc);
        System.out.println("NIF:"+NIF);
        System.out.println("BI:"+BI);
    }  
}
//Docente
import java.io.*;
import java.util.*;


public class Docente extends Utilizadores
{
    private String nome;
    private String data_nasc;
    private String disciplina;
    private int BI;
    private int NIF;


    /**
     * Constructor for objects of class Funcionario
     */
    public Docente()
    {
        super();
        nome="";
        data_nasc="";
        BI=0;
        NIF=0;
    }
    
    public Docente( String nome, String disciplina, String data_nasc, int BI, int NIF, String user, String pass, int tipo)
    {
        super(user,pass,tipo);
        this.nome=nome;
        this.BI=BI;
        this.NIF=NIF;
        this.data_nasc=data_nasc;
        this.disciplina=disciplina;
    }
    // setters
    public void setBi(int BI) { this.BI=BI;}
    public void setNif(int NIF) { this.NIF=NIF;}
    public void setNome(String nome) {this.nome=nome;}
    public void setData_Nasc(String data_nasc) { this.data_nasc=data_nasc;}
    public void setDisciplina(String disciplina) { this.disciplina=disciplina;}


    // getters
    public String getNome() { return nome;}
    public int getBi() { return BI;} 
    public int getNif() { return NIF;}
    public String getData_Nasc() { return data_nasc;}
    public String getdisciplina() { return disciplina;}
    
    public void mostra_docente()
    {
        System.out.println("*************DOCENTE**************");
        System.out.println("NOME:"+nome);
        System.out.println("IDADE:"+data_nasc);
        System.out.println("NIF:"+NIF);
        System.out.println("BI:"+BI);
    }  
}
//classe menu

import java.io.*;
import java.util.*;
import java.text.ParseException;

public class Menu 
{
    private int x;
    private GereEscola gere = new GereEscola();
    
    public void menuInicio() throws IOException
    {
       // GereEscola gere = new GereEscola();
        
        System.out.println("*************SISTEMA DE GESTAO ESCOLAR************");
        System.out.println("*********Escolha uma das seguintes opções*********");
        System.out.println("*********   1 - LOGIN                    *********");
        System.out.println("*********   2 - REGISTO                  *********");
        System.out.println("*********   3 - SAIR                     *********");
        System.out.println("*                                                *");
        System.out.println("**************************************************");
        x=Leitura.LeInt();
        switch (x) {
        /**case 1:
            gere.login(listaUsers);
            break;*/
        case 2:
            gere.registo();
            break;
        case 3:
            System.exit(0);
            break;
            default:
            System.out.println("Esta opcao nao valida!!!");
        }
    }
}

Agradeco toda a ajuda que me possam facultar

cumps

1 Resposta

E

Dicas ao usar um ObjectInput/OutputStream:

a) Quando você grava um List, o objeto recuperado será um List, e você não precisa ficar remontando os pedaços da lista:

List<String> nomes = new ArrayList<String>();
nomes.add ("Joaquina");
nomes.add ("Patrícia");
nomes.add ("Maria");
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ("teste.bin"));
oos.writeObject (nomes);
oos.close();
...
ObjectInputStream ois = new ObjectInputStream (new FileInputStream ("teste.bin"));
List<String> nomes = (List<String>) ois.readObject ();
ois.close();

b) Cuidado com o uso de ObjectInput/OutputStream. Como você viu, é complicado ir adicionando coisas a ele. Se puder, grave apenas um objeto gigante nele (que contenha todos os objetos que você precisa), e depois o feche. Não acrescente mais nada a ele. Ao abrir o arquivo para ler os dados, leia esse objeto gigante e o feche.

Criado 8 de fevereiro de 2013
Ultima resposta 8 de fev. de 2013
Respostas 1
Participantes 2