13

我正在尝试序列化以下类:

public class Library extends ArrayList<Book> implements Serializable{

public Library(){
    check();
}

使用该类的以下方法:

void save() throws IOException {
    String path = System.getProperty("user.home");
    File f = new File(path + "\\Documents\\CardCat\\library.ser");    

    ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream (f));  
    oos.writeObject(this);
    oos.close();
}

但是,library.ser该程序不是创建一个名为 的文件,而是创建一个名为的目录library.ser,其中没有任何内容。为什么是这样?

如果它有帮助,save() 方法最初会从此方法(同一个类)中调用:

void checkFile() {
    String path = System.getProperty("user.home");
    File f = new File(path + "\\Documents\\CardCat\\library.ser");    

    try {    
         if (f.exists()){
             load(f);
         }
         else if (!f.exists()){
             f.mkdirs();
             save();
         }
    } catch (IOException | ClassNotFoundException ex) {
         Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex);
    }
}
4

2 回答 2

35

File.mkdirs() 创建目录而不是文件

这就是它应该做的。阅读 Javadoc。没有关于创建文件的内容。

f.mkdirs();

正是这一行创建了目录。它应该是

f.getParentFile().mkdirs();
于 2013-03-04T23:08:10.593 回答
2

我很确定调用f.mkdirs()是你的问题。如果该文件尚不存在(这似乎是您的情况),该f.mkdirs()调用将为您提供一个名为“library.ser”的目录而不是一个文件,这就是您的“save()”调用不起作用的原因 -您不能将对象序列化到目录。

于 2013-03-04T23:08:28.983 回答