我想从Flat.ser文件中检索一下Flat类的一些问题,并且为此目的我写了这里报告的方法:
Flat.java
public static ArrayList<Flat> retreiveFlat() throws ClassNotFoundException, IOException {
FileInputStream fis = new FileInputStream("path/Flat.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Flat f;
ArrayList<Flat> al = new ArrayList<Flat>();
while (fis.available() > 0) {
Object retrieved = ois.readObject();
if(retrieved instanceof Flat) {
f = (Flat) retrieved;
if(f.getTypeOfFlat().equals("Double")) {
al.add(f);
}
}
}
ois.close();
return al;
}
该方法用于jsp页面:
Page.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="Entity.Flat" %>
<%@ page import="java.util.*" %>
<%
ArrayList<Flat> al = new ArrayList<Flat>();
al = Flat.retreiveFlat();
int i = 0;
while(al.get(i) != null){
//do something
i++;}%>
问题是在jsp页面中al的istance是空的虽然我已经为它返回了retreiveFlat()方法的返回,但是在调试模式中我看到retreiveFlat()方法体内的列表是不是空的。所以当我在al上调用get()方法时,我得到了IndexOutOfBoundsException类型的异常。 任何人都可以告诉我哪里出错了?
答案 0 :(得分:0)
我不知道为什么列表是空的,但是你试图迭代列表的确会抛出IndexOutOfBoundsException
。您应该使用for-each循环(也称为enhanced for)。
替换
while(al.get(i) != null){
// do something with al.get(i)
i++;}
用这个:
for(Flat flat : al) {
// do something with flat
}