CreateNewFile () Java - это также создаст каталоги? - PullRequest
76 голосов
/ 12 июля 2011

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

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

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

Ответы [ 6 ]

174 голосов
/ 12 июля 2011

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

19 голосов
/ 12 июля 2011
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();
14 голосов
/ 12 июля 2011
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

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

4 голосов
/ 31 мая 2018

Java 8 Style

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 голосов
/ 09 апреля 2015

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

0 голосов
/ 03 февраля 2019

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

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

...