Java createNewFile() - будет ли он создавать каталоги?

У меня есть условие, чтобы проверить, существует ли определенный файл перед продолжением (./logs/error.log). Если он не найден, я хочу его создать. Однако,

File tmp = new File("logs/error.log");
tmp.createNewFile();

также создать logs/, если он не существует?

Ответ 1

Нет.
Используйте tmp.getParentFile().mkdirs() перед созданием файла.

Ответ 2

File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

Ответ 3

File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

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

Ответ 4

StringUtils.touch(/path/filename.ext) теперь ( >= 1.3) также создаст каталог и файл, если они не существуют.

Ответ 5

Стиль Java 8

Path path = Paths.get("logs/error.log");
Files.createDirectories(path.getParent());

Написать в файл

Files.write(path, "Log log".getBytes());

Читать

System.out.println(Files.readAllLines(path));

Полный пример

public class CreateFolderAndWrite {

    public static void main(String[] args) {
        try {
            Path path = Paths.get("logs/error.log");
            Files.createDirectories(path.getParent());

            Files.write(path, "Log log".getBytes());

            System.out.println(Files.readAllLines(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ответ 6

Нет, и если logs не существуют, вы получите java.io.IOException: No such file or directory

Интересный факт для разработчиков Android: вызовы подобных Files.createDirectories() и Paths.get() будут работать при поддержке min api 26.