尝试读取序列化文件
Trying to read a serialized file
我一直在尝试读取此文件并将每个对象添加到 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;
}
永远不要吞掉异常,否则你将不知道哪里出了问题
改为
catch (Exception e) {
e.printStackTrace ();
}
您最有可能在尝试读取文件时遇到异常,并且因为您没有对异常执行任何操作,所以您不知道发生了什么。最起码把异常的内容打印到控制台看看:
e.printStackTrace();
e.getMessage();
因此,再次查看异常并从那里开始。
那个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;
}
}
我一直在尝试读取此文件并将每个对象添加到 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;
}
永远不要吞掉异常,否则你将不知道哪里出了问题
改为
catch (Exception e) {
e.printStackTrace ();
}
您最有可能在尝试读取文件时遇到异常,并且因为您没有对异常执行任何操作,所以您不知道发生了什么。最起码把异常的内容打印到控制台看看:
e.printStackTrace();
e.getMessage();
因此,再次查看异常并从那里开始。
那个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;
}
}