如何创建一个新的文件连同缺少的父目录?

使用时

file.createNewFile();

我得到了下面的例外

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb

我想知道是否有一个 createNewFile 来创建缺少的父目录?

52016 次浏览

你试过这个吗?

file.getParentFile().mkdirs();
file.createNewFile();

我不知道哪个 单身方法调用可以做到这一点,但是它非常简单,就像两个语句。

如果您确定用于创建文件的路径字符串包含父目录,也就是说,如果您确定路径的格式为 <parent-dir>/<file-name>,那么 Jon 的回答就有效。

如果它不是,也就是说它是形式 <file-name>的相对路径,那么 getParentFile()将返回 null

例如。

File f = new File("dir/text.txt");
f.getParentFile().mkdirs();     // works fine because the path includes a parent directory.


File f = new File("text.txt");
f.getParentFile().mkdirs();     // throws NullPointerException because the parent file is unknown, i.e. `null`.

因此,如果您的文件路径可能包含也可能不包含父目录,使用以下代码会更安全:

File f = new File(filename);
if (f.getParentFile() != null) {
f.getParentFile().mkdirs();
}
f.createNewFile();

从 java7开始,你也可以使用 NIO2 API:

void createFile() throws IOException {
Path fp = Paths.get("dir1/dir2/newfile.txt");
Files.createDirectories(fp.getParent());
Files.createFile(fp);
}