如何从文件中读取ArrayList到另一个ArrayList?

时间:2014-01-16 18:20:57

标签: java file arraylist

我试图将文件中的arraylist读入另一个arraylist,但我一直在收到错误。该文件名为eventos.dat,arraylist来自Evento类型。我想用文件中数组中的对象创建一个新的ArrayList<Evento>。这是我正在使用的方法:

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;
    }           

}

没有错误但仍然无效。

1 个答案:

答案 0 :(得分:0)

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

这不会创建新类型的ArrayList<Evento>

虽然您可以使用读取文本文件时提供的String创建Evento的新实例。您可以使用split(String par1)类中的String方法创建Evento的新实例并将其添加到arraylist。

有关拆分的更多信息,请参阅JavaDocs