试图读取序列化文件

时间:2015-04-27 01:45:52

标签: java file arraylist deserialization

我一直在尝试阅读此文件,并在ArrayList中添加每个对象。问题是它永远不会进入while循环。

你们知道可能是什么问题吗?我可以改进代码的语法吗?

public ArrayList<Notificacion> obtenerListaNovedades() {
    ObjectInputStream ois = null;
    try {
        if (f.exists()) {
            FileInputStream fis = new FileInputStream(f);
            ois = new ObjectInputStream(fis);
            while (true) {
                Notificacion notificacion = (Notificacion) ois.readObject();                    
                listaNotificaciones.add(notificacion);        
            }
        } else {
            System.out.println("hay algo ene l archi");
        }           
    } catch (Exception e) {

    }
    return listaNotificaciones;
}

3 个答案:

答案 0 :(得分:2)

while循环只会在发生异常时退出。最好用布尔值控制循环,然后通过将布尔值设置为false来捕获EOFException以退出循环。类似的东西:

boolean hasObjects = true;

while (hasObjects) {
    String notificacion = null;
    if (ois != null) {
        try {
            notificacion = (Notificacion) ois.readObject();
            listaNotificaciones.add(notificacion);
        } catch (EOFException e) {
            hasObjects = false;
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }
    } else {
        hasObjects = false;
    }
}

答案 1 :(得分:1)

永远不会吞下异常,否则你不会知道出了什么问题

更改为

catch (Exception e) {
   e.printStackTrace ();
}

答案 2 :(得分:0)

您最有可能在尝试读取文件时遇到异常,并且因为您没有做任何异常操作,您不知道发生了什么。至少,将异常的内容打印到控制台并查看:

e.printStackTrace();
e.getMessage();

所以,再次,看看异常并从那里开始。