Как создать новый файл вместе с отсутствующими родительскими каталогами? - PullRequest
84 голосов
/ 22 июня 2010

При использовании

file.createNewFile();

Я получаю следующее исключение

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

Мне интересно, существует ли createNewFile, который создает отсутствующие родительские каталоги?

Ответы [ 3 ]

132 голосов
/ 22 июня 2010

Вы пробовали это?

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

Я не знаю ни одного одиночного вызова метода, который бы делал это, но это довольно просто, как два утверждения.

11 голосов
/ 21 ноября 2014

Ответ Джона работает, если вы уверены, что строка пути, с которой вы создаете файл, включает родительские каталоги, т.е. если вы уверены, что путь имеет форму <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();
1 голос
/ 11 апреля 2019

Начиная с java7, вы также можете использовать NIO2 API:

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...