Wie erstelle ich eine neue Datei zusammen mit fehlenden übergeordneten Verzeichnissen?

Lesezeit: 2 Minuten

Benutzer-Avatar
Pentium10

Beim Benutzen

file.createNewFile();

Ich erhalte die folgende Ausnahme

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb

Ich frage mich, ob es ein createNewFile gibt, das die fehlenden übergeordneten Verzeichnisse erstellt?

Hast du das versucht?

file.getParentFile().mkdirs();
file.createNewFile();

Ich kenne keine Single Methodenaufruf, der dies tut, aber es ist ziemlich einfach als zwei Anweisungen.

  • Dies funktioniert nur, wenn die Datei mit einem Pfadstring erstellt wurde, der ein übergeordnetes Verzeichnis enthält, dh new File("file.txt").getParentFile() kehrt zurück null, new File("dir/file.txt").getParentFile() gibt dasselbe zurück wie new File("dir")

    – Zoltán

    21. November 2014 um 9:38 Uhr

  • Stimmt, brauchst du nicht mkdirs wenn sich die Datei, die Sie erstellen möchten, nicht in einem nicht vorhandenen Verzeichnis befindet, mein Anwendungsfall jedoch darin besteht, dass ich mehrere Dateien erstelle, etwas von denen haben übergeordnete Verzeichnisse, während andere dies nicht haben.

    – Zoltán

    21. November 2014 um 9:42 Uhr

  • Wenn dein File Instanz selbst als Ordner gedacht ist, können Sie einfach Folgendes tun: folder.mkdirs();.

    – zr0gravity7

    8. Februar um 20:27 Uhr

Benutzer-Avatar
Zoltán

Jons Antwort funktioniert, wenn Sie sicher sind, dass die Pfadzeichenfolge, mit der Sie eine Datei erstellen, übergeordnete Verzeichnisse enthält, dh wenn Sie sicher sind, dass der Pfad die Form hat <parent-dir>/<file-name>.

Wenn dies nicht der Fall ist, handelt es sich also um einen relativen Pfad des Formulars <file-name>dann getParentFile() wird zurückkehren null.

Z.B

File f = new File("dir/text.txt");
f.getParentFile().mkdirs();     // works fine because the path includes a parent directory.

File f = new File("text.txt");
f.getParentFile().mkdirs();     // throws NullPointerException because the parent file is unknown, i.e. `null`.

Wenn Ihr Dateipfad also übergeordnete Verzeichnisse enthalten kann oder nicht, sind Sie mit dem folgenden Code sicherer:

File f = new File(filename);
if (f.getParentFile() != null) {
  f.getParentFile().mkdirs();
}
f.createNewFile();

  • Aus vielen Gründen sollten Sie immer einen Pfad angeben. Wie sonst sollte das System wissen, wo Sie diese Datei ablegen möchten?

    – NikkyD

    9. September 2015 um 15:21 Uhr

  • @NikkyD Es tut mir leid, ich verstehe deinen Kommentar nicht ganz. In meiner Antwort sage ich nicht, dass Sie keinen Pfad enthalten, aber dass der übergebene Pfad möglicherweise keinen enthält übergeordnete Verzeichnisse. Es gibt auch ein Beispiel für einen solchen Pfad in der Antwort.

    – Zoltán

    9. September 2015 um 15:26 Uhr

Ab Java7 können Sie auch die NIO2-API verwenden:

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}

1312440cookie-checkWie erstelle ich eine neue Datei zusammen mit fehlenden übergeordneten Verzeichnissen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy