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

Java File.mkdirs()创建目录而不是文件,java,io,Java,Io,我正在尝试序列化以下类: public class Library extends ArrayList<Book> implements Serializable{ public Library(){ check(); } 但是,程序不是创建名为library.ser的文件,而是创建名为library.ser的目录,其中没有任何内容。为什么会这样 如果有帮助,save()方法最初会从此方法(属于同一类)调用: File.mkdirs()创建目录而不是文件 这就是它应该做的

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

public class Library extends ArrayList<Book> implements Serializable{

public Library(){
    check();
}
但是,程序不是创建名为
library.ser
的文件,而是创建名为
library.ser
的目录,其中没有任何内容。为什么会这样

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

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

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

f、 mkdirs()

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

f.getParentFile().mkdirs();

我很确定调用
f.mkdirs()
是您的问题。如果文件不存在(这似乎是您的情况),调用
f.mkdirs()
会给您一个名为“library.ser”的目录,而不是一个文件,这就是为什么“save()”调用不起作用-您无法将对象序列化到目录。

以及
f.createNewFile()
,创建不存在的文件。@这完全不必要
new FileOutputStream()
无论如何都会这样做。没错,抛出的
FileNotFoundException
让我很困惑。@ddmps在
FileOutputStream
的情况下,这意味着找不到目录。这就是为什么要使用
mkdirs()
。换句话说,没有这样的约束。我真的不明白这句话和它有什么关系,或者它的真正含义是什么。这意味着操作系统允许他创建一个名为“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);
    }
}
f.getParentFile().mkdirs();