Utwórz automatycznie pełną ścieżkę podczas zapisywania do nowego pliku

246

Chcę napisać nowy plik za pomocą FileWriter. Używam tego w ten sposób:

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

Teraz dir1i dir2obecnie nie istnieją. Chcę, aby Java tworzyła je automatycznie, jeśli jeszcze ich tam nie ma. W rzeczywistości Java powinna skonfigurować całą ścieżkę do pliku, jeśli jeszcze nie istnieje.

Jak mogę to osiągnąć?


źródło

Odpowiedzi:

431

Coś jak:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
Jon Skeet
źródło
11
Dlaczego getParentFile, a nie tylko mkdir?
sauperl
Czy zastąpi poprzedni folder, jeśli ponownie wydam ten sam kod z innym plikiem rodzeństwa?
surajs1n
1
@ surajs1n: Jeśli katalog już istnieje, mkdirsnic nie zrobi.
Jon Skeet
3
@sauperl: Jeśli plik jeszcze nie istnieje, mkdirs () przyjmuje, że wszystko, co określone, to katalog i tworzy go jako taki (właśnie go przetestował). Korzystając z getParentFile () , pozostawiasz tworzenie samego pliku do FileWriter .
h4nek
149

Od wersji Java 1.7 możesz używać Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
cdmihai
źródło
4
Ważne jest, aby pamiętać, że ścieżki względne mogą powodować wyjątek wskaźnika zerowego. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag
if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Sprawdź, czy katalog już istnieje, aby uniknąć błędu
Andre Nel,
29

Użyj 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
źródło
16

Zastosowanie File.mkdirs().

Marcelo Cantos
źródło
1
Spowoduje to utworzenie katalogu `C: \\ użytkownik \ Desktop \ katalog1 \ katalog2 \ nazwa_pliku.txt`.
Martin Schröder
@ MartinSchröder: Tylko jeśli zachowasz komponent nazwy pliku.
Marcelo Cantos,
4

Użyj FileUtils, aby poradzić sobie z tymi wszystkimi bólami głowy.

Edycja: na przykład użyj poniższego kodu, aby zapisać do pliku, ta metoda „sprawdzi i utworzy katalog nadrzędny, jeśli nie istnieje”.

openOutputStream(File file [, boolean append]) 
kakacii
źródło
1
Czy mógłbyś być bardziej szczegółowy?
Jean
Cześć Jean, pod redakcją. Istnieje wiele innych przydatnych metod w FileUtils. Klasy IO Apache Commons, takie jak OIUtils i FileUtils, ułatwiają życie programistom Java.
kakacii
1
Zgadzam się, FileUtils to dobry sposób, ale myślę, że łatwiejszym sposobem jest użycie writeStringToFile, a nie openOutputStream. Np. Plik plik = nowy plik („C: /user/Desktop/dir1/dir2/filename.txt”); FileUtils.writeStringToFile (plik, „foo bar baz”, prawda);
Paul
Dziękuję za to . Teraz mój kod jest znacznie czystszy. Link do najnowszego javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu