Erstellen Sie beim Schreiben in eine neue Datei automatisch den gesamten Pfad

246

Ich möchte eine neue Datei mit dem schreiben FileWriter. Ich benutze es so:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

Jetzt dir1und dir2aktuell nicht vorhanden. Ich möchte, dass Java sie automatisch erstellt, wenn sie noch nicht vorhanden sind. Eigentlich sollte Java den gesamten Dateipfad einrichten, falls nicht bereits vorhanden.

Wie kann ich das erreichen?


quelle

Antworten:

431

Etwas wie:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
Jon Skeet
quelle
11
Warum getParentFile und nicht nur mkdirs?
Sauperl
Wird der vorherige Ordner überschrieben, wenn ich denselben Code mit einer anderen Geschwisterdatei erneut ausstelle?
surajs1n
1
@ surajs1n: Wenn das Verzeichnis bereits existiert, mkdirswird nichts getan.
Jon Skeet
3
@sauperl: Wenn die Datei noch nicht existiert, geht mkdirs () davon aus, dass alles, was angegeben wird, ein Verzeichnis ist, und erstellt es als solches (gerade getestet). Mit getParentFile () überlassen Sie die Erstellung der Datei selbst dem FileWriter .
h4nek
149

Seit Java 1.7 können Sie Files.createFile verwenden:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
cdmihai
quelle
4
Es ist wichtig zu beachten, dass relative Pfade eine Nullzeigerausnahme verursachen können. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag
if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Testen Sie, ob das Verzeichnis bereits vorhanden ist, um Fehler zu vermeiden
Andre Nel
29

Verwendung File.mkdirs():

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);
Armand
quelle
16

Verwenden Sie File.mkdirs().

Marcelo Cantos
quelle
1
Dadurch wird ein Verzeichnis "C: \\ Benutzer \ Desktop \ Verzeichnis1 \ Verzeichnis2 \ Dateiname.txt" erstellt.
Martin Schröder
@ MartinSchröder: Nur wenn Sie die Dateinamenkomponente behalten.
Marcelo Cantos
4

Verwenden Sie FileUtils , um all diese Kopfschmerzen zu behandeln.

Bearbeiten: Verwenden Sie beispielsweise den folgenden Code, um in eine Datei zu schreiben. Diese Methode überprüft und erstellt das übergeordnete Verzeichnis, falls es nicht vorhanden ist.

openOutputStream(File file [, boolean append]) 
kakacii
quelle
1
Könnten Sie bitte genauer sein?
Jean
Hallo Jean, bearbeitet. Unter FileUtils gibt es eine ganze Reihe weiterer nützlicher Methoden. Apache Commons IO-Klassen wie OIUtils und FileUtils erleichtern Java-Entwicklern das Leben.
Kakacii
1
Ich bin damit einverstanden, dass FileUtils ein guter Weg ist, aber ich denke, ein einfacherer Weg dazu ist die Verwendung von writeStringToFile, nicht openOutputStream. ZB File file = new File ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (Datei, "foo bar baz", true);
Paul
Dank dafür . Mein Code wurde jetzt viel sauberer. Link zum letzten javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu