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?

n0pe
quelle

Antworten:

187

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

jtahlborn
quelle
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();
Eng.Fouad
quelle
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.

Jake Roussel
quelle
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();
        }
    }
}
ahmet
quelle
3

StringUtils.touch(/path/filename.ext) wird jetzt (> = 1.3) auch das Verzeichnis und die Datei erstellen, wenn sie nicht existieren.

NathanChristie
quelle
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.

Alejandra
quelle