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?

Odpowiedzi:


188

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


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();

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.


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();
        }
    }
}

3

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.