Java's createNewFile () - czy utworzy również katalogi?

85

Mam warunek, aby sprawdzić, czy określony plik istnieje przed kontynuowaniem ( ./logs/error.log). Jeśli nie zostanie znaleziony, chcę go utworzyć. Jednak będzie

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

również tworzyć, logs/jeśli nie istnieje?

n0pe
źródło

Odpowiedzi:

188

Nie.
Użyj tmp.getParentFile().mkdirs()przed utworzeniem pliku.

jtahlborn
źródło
Ups. Używałem "tmp.mkdirs ()". Dlatego mój plik został utworzony jako folder
GabrielBB
20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();
Eng. Fouad
źródło
6
Proponuję użyć „mkdirs” zamiast „mkdir”, aby kod mógł również tworzyć nieistniejące foldery nadrzędne :)
Nimpo
14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

Jeśli katalogi już istnieją, nic się nie stanie, więc nie potrzebujesz żadnych kontroli.

Jake Roussel
źródło
8

Styl Java 8

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

Zapisać w pliku

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

Czytać

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

Pełny przykład

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();
        }
    }
}
ahmet
źródło
3

StringUtils.touch(/path/filename.ext) teraz (> = 1.3) utworzy również katalog i plik, jeśli nie istnieją.

NathanChristie
źródło
1
Przepraszam za późny komentarz, ale teraz powinno byćFileUtils.touch(new File(file_path))
shark1608
0

Nie, a jeśli logsnie istnieje, otrzymaszjava.io.IOException: No such file or directory

Ciekawostka dla programistów Androida: wywołuje podobne Files.createDirectories()i Paths.get()działałoby przy obsłudze min api 26.

Alejandra
źródło