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