2014-01-16 62 views
0

我試圖從一個文件讀到一個arraylist到另一個arraylist,但我不斷收到錯誤。該文件被稱爲eventos.dat,而數組列表來自類型Evento。我想用文件中數組的對象創建一個新的ArrayList<Evento>。下面是我使用的方法:如何從一個文件讀取一個ArrayList到另一個ArrayList?

public class ListaEventos implements Serializable{ 
    private ArrayList<Evento> eventos = new ArrayList(); 

    public String adicionarEvento(Evento novo){ 
     for (Evento evento : eventos) { 
      if(novo.equals(evento)){ 
       return "Evento já existe"; 
      }  
     } 
     eventos.add(novo); 
     return "ADICIONEI"; 

    } 


    public ArrayList<Evento> getEventos() { 
     return eventos; 
    } 

    public Evento procuraEvento(String tituloEvento){ 
     for (Evento evento : eventos){ 
      if(tituloEvento.equals(evento.getTitulo())){ 
       return evento; 
      } 
     } 
     return null; 
    } 

    public String editaEvento(Evento antigo, Evento novo){ 
     for (int i=0;i<eventos.size();i++){ 
      if(antigo.equals(eventos.get(i))){ 
       eventos.get(i).setTitulo(novo.getTitulo()); 
       eventos.get(i).setData(novo.getData()); 
       eventos.get(i).setDescricao(novo.getDescricao()); 
       eventos.get(i).setLocal(novo.getLocal()); 
       eventos.get(i).setPrivado(novo.getPrivado()); 
       return "Editei evento"; 
      } 
     } 
     return "Evento não existe"; 
    } 

    public String removeEvento(String removeTitulo){ 
     Evento aux= procuraEvento(removeTitulo); 

     if(aux != null){ 
      eventos.remove(aux); 
      return "Evento removido!"; 
     } 
     return "Evento não existe"; 
    } 



    public void gravaFicheiro(){ 
     try{ 
      ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Eventos.dat")); 
      out.writeObject(eventos); 
      out.close(); 
     } 
     catch(IOException ex){ 
      System.out.println("Não conseguiu gravar"); 
     } 
    } 

    public ArrayList<Evento> carregaEventos() throws ClassNotFoundException{ 

     try{ 

      ObjectInputStream in = new ObjectInputStream(new FileInputStream ("Eventos.dat")); 
      eventos=(ArrayList<Evento>) in.readObject(); 
      in.close(); 
      return eventos; 

     }catch(IOException ex){ 
      System.out.println("Ficheiro não existe"); 
      return null; 
     } 
    } 
} 

這裏是Evento類:

public class Evento implements Serializable { 

    private String titulo = "Nao preenchido"; 
    private String data = "Nao preenchido"; 
    private String local = "Nao preenchido"; 
    private String descricao = "Nao preenchido"; 
    private String privado = "Nao preenchido"; 
    private ArrayList<Contacto> convidados = new ArrayList(); 

    public Evento() { 

    } 

    public Evento(String titulo, String data, String local, String descricao, String privado) { 
     this.titulo = titulo; 
     this.data = data; 
     this.local = local; 
     this.descricao = descricao; 
     this.privado = privado; 
    } 

    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 

    public void setData(String data) { 
     this.data = data; 
    } 

    public void setLocal(String local) { 
     this.local = local; 
    } 

    public void setDescricao(String descricao) { 
     this.descricao = descricao; 
    } 

    public void setPrivado(String privado) { 
     this.privado = privado; 
    } 


    public String getTitulo() { 
     return titulo; 
    } 

    public String getData() { 
     return data; 
    } 

    public String getLocal() { 
     return local; 
    } 

    public String getDescricao() { 
     return descricao; 
    } 

    public String getPrivado() { 
     return privado; 
    } 

    public ArrayList<Contacto> getConvidados() { 
     return convidados; 
    } 

    public void setConvidados(ArrayList<Contacto> convidados) { 
     this.convidados = convidados; 
    } 

    public String adicionaConvidado(String nomeConvidado){ 
     Contacto novo = new Contacto(); 
     for (Contacto contacto : this.convidados) { 
      if(nomeConvidado.equals(contacto.getNome())){ 
       return "Contacto já foi convidado"; 
      } 
     } 
     novo.setNome(nomeConvidado); 
     novo.setEmail(""); 
     novo.setTelefone(""); 
     convidados.add(novo); 
     return "ADICIONEI CONVIDADO"; 

    } 

    public Evento(String titulo, String local) { 
     this.titulo = titulo; 
     this.local = local; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (obj == null) { 
      return false; 
     } 
     if (getClass() != obj.getClass()) { 
      return false; 
     } 
     final Evento other = (Evento) obj; 
     if (!Objects.equals(this.titulo, other.titulo)) { 
      return false; 
     } 
     if (!Objects.equals(this.data, other.data)) { 
      return false; 
     } 
     if (!Objects.equals(this.local, other.local)) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "Evento{" + "titulo=" + titulo + ", data=" + data + ", local=" + local + ", descricao=" + descricao + ", privado=" + privado + ", convidados=" + convidados + '}'; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 7; 
     return hash; 
    } 

改變了方法CarregaEvento到:

public ArrayList<Evento> carregaEventos() throws ClassNotFoundException { 

    try{ 

     ObjectInputStream in = new ObjectInputStream(new FileInputStream ("Eventos.dat")); 
     eventos=(ArrayList<Evento>) in.readObject(); 
     in.close(); 
     return eventos; 

    }catch(IOException ex){ 
     System.out.println("Ficheiro não existe"); 
     return null; 
    }   

} 

沒有錯誤,但仍然無法正常工作。

+0

請發佈您的'Evento'類(至少我們需要知道構造函數以及'eventos.dat'的格式)。 –

+0

您是否收到錯誤? –

+0

是什麼問題? – rkosegi

回答

0
eventos=(ArrayList<Evento>) in.readObject(); 

這不會創建一個新類型的ArrayList<Evento>

雖然您可以使用讀取文本文件時提供的字符串創建Evento的新實例。您可以使用String類中的split(String par1)方法創建Evento的新實例並將其添加到數組列表。

參考JavaDocs獲取更多關於分割的信息。

相關問題