Crea automaticamente l'intero percorso quando scrivi su un nuovo file


246

Voglio scrivere un nuovo file con il FileWriter. Lo uso così:

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

Ora dir1e dir2attualmente non esistono. Voglio che Java li crei automaticamente se non sono già lì. In realtà Java dovrebbe impostare l'intero percorso del file se non già esistente.

Come posso raggiungere questo obiettivo?

Risposte:


431

Qualcosa di simile a:

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

11
Perché getParentFile e non solo mkdirs?
Sauperl

Sostituirà la cartella precedente se riporto lo stesso codice con file di fratelli diversi?
surajs1n

1
@ surajs1n: se la directory esiste già, mkdirsnon farà nulla.
Jon Skeet,

3
@sauperl: se il file non esiste ancora, mkdirs () assumerà che tutto ciò che è specificato sia una directory e lo crei come tale (appena testato). Usando getParentFile () , si lascia la creazione del file stesso a FileWriter .
h4nek,

149

Da Java 1.7 è possibile utilizzare Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
Importante tenere presente che i percorsi relativi potrebbero causare un'eccezione puntatore null. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag

if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Verifica se la directory esiste già per evitare errori
Andre Nel

29

Utilizzare 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

Usa FileUtils per gestire tutti questi mal di testa.

Modifica: ad esempio, utilizzare il codice seguente per scrivere su un file, questo metodo "controlla e crea la directory principale se non esiste".

openOutputStream(File file [, boolean append]) 

1
Per favore, potresti essere più specifico?
Jean,

Ciao Jean, a cura di. C'è un sacco di altri metodi utili in FileUtils. Le classi IO di Apache Commons come OIUtils e FileUtils semplificano la vita degli sviluppatori Java.
Kakacii,

1
Sono d'accordo che FileUtils è un buon modo per andare, ma penso che un modo più semplice per farlo sia usare writeStringToFile, non openOutputStream. Ad esempio, File file = new File ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (file, "foo bar baz", true);
paul

Grazie per quello Ora ho reso il mio codice molto più pulito. Link al recente javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.