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», чтобы ваш код мог также создавать несуществующие родительские папки :)
Nimpo

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 08

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.