以下代码返回IOException。这是我的主要内容:
public class Main
{
public static void main(String[] args) {
Book b1 = new Book(100, "The Big Book of Top Gear 2010", "Top Gear",
"BBC Books", 120, "Book about cars.");
Book b2 = new Book(200, "The Da Vinci Code", "Dan Brown", "Vatican", 450,
"A fast paced thriller with riddles.");
Book b3 = new Book(300, "Le Petit Nicolas", "Sempe Goscinny", "Folio", 156,
"The adventures of petit Nicolas.");
ArrayList<Book> biblia = new ArrayList<Book>();
biblia.add(b1);
biblia.add(b2);
biblia.add(b3);
File f = new File("objects");
try {
FileInputStream fis = new FileInputStream("objects");
int u = fis.read();
if (u != -1) {
ObjectInputStream ois = new ObjectInputStream(fis);
Bookstore b = (Bookstore) ois.readObject();
ois.close();
} else {
Bookstore b = new Bookstore(biblia);
FileOutputStream fos = new FileOutputStream("objects");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(b);
oos.close();
}
} catch (FileNotFoundException ex1) {
System.out.println("File not found.");
} catch (IOException ex2) {
System.out.println("IO Error.");
} catch (ClassNotFoundException ex3) {
System.out.println("Class not found.");
}
}
这是Bookstore类,我用它来存储Book对象的ArrayList,以便在Object流中使用它。
public class Bookstore implements Serializable {
private ArrayList<Book> myBooks = new ArrayList<Book>();
public Bookstore(ArrayList<Book> biblia) {
myBooks = biblia;
}
}
我也导入了所有正确的库。 我尝试做的是:如果文件不为空,则从那里读取ArrayList(包含arraylist的bookstore对象)。如果它是空的,写一个新的。 问题是我唯一得到的回报是“IO错误”。我无法理解为什么。
答案 0 :(得分:2)
测试文件是否存在是错误的方法。您正在尝试从不存在的文件创建流,并抛出FileNotFoundException。而不是:
FileInputStream fis = new FileInputStream("objects");
int u = fis.read();
if (u != -1) {
只需使用
if(f.exists()) { ... }
答案 1 :(得分:1)
如果您在获得异常时打印堆栈跟踪,它会帮助您调试这些问题,但我猜测Book不可序列化。
答案 2 :(得分:0)
明天可能是正确的。为了回答你为什么会出现“IO错误”,这是因为你告诉程序打印出来是否存在IO错误。为了调试代码,我会删除
catch (IOException ex2) {
System.out.println("IO Error.");
}
代码部分或注释掉,以便您可以获得堆栈跟踪。然后,您可以查明错误发生的位置和原因,因为它会给您一个异常以及抛出该异常的行。