有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java文件。mkdirs()创建目录而不是文件

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

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

共 (2) 个答案

  1. # 1 楼答案

    File.mkdirs() creating a directory instead of a file

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

    f.mkdirs();

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

    f.getParentFile().mkdirs();
    
  2. # 2 楼答案

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