Відповіді:
Ви пробували це?
file.getParentFile().mkdirs();
file.createNewFile();
Я не знаю жодного виклику методу, який би це зробив, але це досить просто, як два твердження.
mkdirsякщо файл, який ви намагаєтесь створити, не знаходиться в неіснуючому каталозі, але мій випадок використання полягає в тому, що я створюю кілька файлів, деякі з яких мають батьківські каталоги, а інші - ні.
Відповідь Джона працює, якщо ви впевнені, що рядок шляху, за допомогою якого ви створюєте файл, включає батьківські каталоги, тобто якщо ви впевнені, що шлях має форму <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();
new File("file.txt").getParentFile()повертаєтьсяnull,new File("dir/file.txt").getParentFile()повертає те саме, щоnew File("dir")