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?

Antworten:


431

Etwas wie:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

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);

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);


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]) 

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