Java createNewFile () - werden auch Verzeichnisse erstellt?


84

Ich habe eine Bedingung, um zu überprüfen, ob eine bestimmte Datei vorhanden ist, bevor ich fortfahre ( ./logs/error.log). Wenn es nicht gefunden wird, möchte ich es erstellen. Wird jedoch

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

auch erstellen, logs/wenn es nicht existiert?

Antworten:


187

Nein.
Verwenden tmp.getParentFile().mkdirs()Sie diese Option, bevor Sie die Datei erstellen.


Hoppla. Ich habe "tmp.mkdirs ()" verwendet. Aus diesem Grund wurde meine Datei als Ordner erstellt
GabrielBB

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

6
Ich schlage vor, "mkdirs" anstelle von "mkdir" zu verwenden, damit Ihr Code auch nicht vorhandene übergeordnete Ordner erstellen kann :)
Nimpo

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

Wenn die Verzeichnisse bereits vorhanden sind, geschieht nichts, sodass Sie keine Überprüfungen benötigen.


8

Java 8 Style

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

In eine Datei schreiben

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

Lesen

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

Vollständiges Beispiel

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) wird jetzt (> = 1.3) auch das Verzeichnis und die Datei erstellen, wenn sie nicht existieren.


1
Verzeihen Sie den späten Kommentar, aber dies sollte jetzt seinFileUtils.touch(new File(file_path))
shark1608

0

Nein, und wenn logses nicht existiert, erhalten Siejava.io.IOException: No such file or directory

Unterhaltsame Tatsache für Android-Entwickler: Ruft solche an Files.createDirectories()und Paths.get()würde funktionieren, wenn min api 26 unterstützt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.