Подтвердить что ты не робот

Как создать новый файл вместе с отсутствующими родительскими каталогами?

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

file.createNewFile();

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Ответ 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();