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();