如何与缺少的父目录一起创建新文件?

时间:2010-06-22 06:27:22

标签: java

使用时

file.createNewFile();

我收到以下异常

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

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

3 个答案:

答案 0 :(得分:128)

你试过这个吗?

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

我不知道会执行此操作的单个方法调用,但它很容易作为两个语句。

答案 1 :(得分:11)

如果您确定用于创建文件的路径字符串包含父目录,即如果您确定路径的格式为<parent-dir>/<file-name>,则Jon的答案有效。

如果没有,即它是<file-name>格式的相对路径,则getParentFile()将返回null

E.g。

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

答案 2 :(得分:0)

从java7开始,您还可以使用NIO2 API:

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