Java 如何在缺少父目录的情况下创建新文件?

Java 如何在缺少父目录的情况下创建新文件?,java,Java,使用时 file.createNewFile(); 我得到以下例外 java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb 我想知道是否有createNewFile创建丢失的父目录?您尝试过这个吗 file.getParentFile().mkdirs(); file.createNewFile(); 我不知道有哪一个方法调用可以做到这一点,但它非常简单,只需两条语句即可。如

使用时

file.createNewFile();
我得到以下例外

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb
我想知道是否有createNewFile创建丢失的父目录?

您尝试过这个吗

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

我不知道有哪一个方法调用可以做到这一点,但它非常简单,只需两条语句即可。

如果您确定创建文件时使用的路径字符串包含父目录,即如果您确定路径的形式为
/
,Jon的回答就有效

如果它不是,即它是表单
的相对路径,则
getParentFile()
将返回
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);
}

这仅适用于使用包含父目录的路径字符串创建文件的情况,即
新文件(“file.txt”)。getParentFile()
返回
null
新文件(“dir/file.txt”)。getParentFile()
返回与
新文件(“dir”)相同的值,如果您试图创建的文件不在不存在的目录中,则不需要
mkdirs
,但我的使用案例是,我正在创建多个文件,其中一些文件具有父目录,而其他文件则不具有父目录。出于许多原因,您应该始终包含路径。否则系统怎么知道你想把文件放在哪里?@NikkyD对不起,我不太理解你的评论。在我的回答中,我并不是说没有包含路径,而是说传递的路径可能不包含父目录。答案中也有这样一条路径的例子。
void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}