Java createNewFile () - чи буде він також створювати каталоги?


85

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

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

також створити, logs/якщо його не існує?

Відповіді:


188

Ні.
Використовуйте tmp.getParentFile().mkdirs()перед створенням файлу.


На жаль Я використовував "tmp.mkdirs ()". Ось чому мій файл створювався як папка
GabrielBB

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

6
Я пропоную використовувати "mkdirs" замість "mkdir", щоб ваш код також міг створювати неіснуючі батьківські папки :)
Німпо

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

Якщо каталоги вже існують, нічого не трапиться, тому перевірки не потрібні.


8

Стиль 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();
        }
    }
}

3

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


1
Вибачте за пізній коментар, але це повинно бути заразFileUtils.touch(new File(file_path))
shark1608

0

Ні, а якщо logsне існує, ви отримаєтеjava.io.IOException: No such file or directory

Цікавий факт для розробників Android: викликає подібні програми Files.createDirectories()та Paths.get()працює під час підтримки min api 26.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.