欠落している親ディレクトリと共に新しいファイルを作成するにはどうすればよいですか?


98

使用する場合

file.createNewFile();

次の例外が発生します

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

不足している親ディレクトリを作成するcreateNewFileはあるのでしょうか。

回答:


150

これを試しましたか?

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

これを行う単一のメソッド呼び出しについては知りませんが、2つのステートメントのように非常に簡単です。


これは、ファイルが作成された場合は、親ディレクトリを含むパス文字列、すなわちで動作new File("file.txt").getParentFile()戻りnullnew File("dir/file.txt").getParentFile()同じ返しますnew File("dir")
ゾルタン

1
真のは、あなたが必要としないmkdirsあなたが作成しようとしているファイルが存在しないディレクトリにありませんが、私のユースケースは、私は、複数のファイルを作成していますということであれば、いくつかの他の人がいない間、親ディレクトリを持っているの。
ゾルタン2014年

14

Jonの答えは、ファイルの作成に使用するパス文字列に親ディレクトリが含まれていることが確実な場合、つまりパスがの形式であることが確実な場合に機能します<parent-dir>/<file-name>

そうでない場合、つまりフォームの相対パスである場合<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();

多くの理由で、常にパスを含める必要があります。そのファイルを配置する場所をシステムが他にどのように知る必要がありますか?
NikkyD 2015

@NikkyDすみません、あなたのコメントがよくわかりません。私の答えでは、パスが含まれていないとは言っていませんが、渡されたパスには親ディレクトリが含まれていない可能性があります。答えにはそのような経路の例もあります。
ゾルタン・

7

java7以降では、NIO2 APIを使用することもできます。

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.