0
public void save() throws IOException {
            File f = new File(path);
            if (!f.getParentFile().exists()) {
                f.getParentFile().mkdirs();
            }
            FileOutputStream fout = new FileOutputStream(f, false);//overwrite, append set to false
            ObjectOutputStream out = new ObjectOutputStream(fout);

            out.writeObject(this.vehicles);
            out.close();
        }

我有以下代码将车辆类型的对象保存到文件中。但是,我不太了解它是如何工作的,因为它是为我提供的示例,而且我是 java 领域的新手。

我想知道这些行的解释是if (!f.getParentFile().exists()) { f.getParentFile().mkdirs(); }什么我想知道getParentFile().exists()在我们对文件本身感兴趣的同时搜索父文件是什么以及为什么要搜索父文件。下一行的同样问题:为什么我们要创建文件时对父目录感兴趣?我也想知道在以下几行中两者之间的区别FileOutputStream以及ObjectOutputStream为什么两者并排使用FileOutputStream fout = new FileOutputStream(f, false);//overwrite, append set to false ObjectOutputStream out = new ObjectOutputStream(fout); 提前谢谢

4

1 回答 1

2

文件是指向文件系统上文件或目录位置的指针。但是,如果您打算写入文件,则它所在的父目录必须存在。否则,你会得到一个IOException. 该mkdirs调用将创建必要的父目录(或多个目录)以避免IOException.

不过,我认为exists检查并不是真正必要的,因为mkdirs如果该方法实际上没有创建任何内容,则该方法返回 false。

此外,您应该在一个块中关闭您的 OutputStreamfinally或使用 Java 7 try-with-resources:

try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f, false))) {
    out.writeObject(vehicles);
}
于 2013-04-27T12:37:48.427 回答