2010-05-14 14 views
172

Je veux écrire un nouveau fichier avec le FileWriter. Je l'utilise comme ceci:Créer un chemin entier automatiquement lors de l'écriture dans un nouveau fichier

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

maintenant dir1 et dir2 n'existent pas actuellement. Je veux que Java les crée automatiquement s'ils ne sont pas déjà là. En fait Java devrait mettre en place le chemin complet du fichier s'il n'existe pas déjà.

Comment puis-je y parvenir?

Répondre

306

Quelque chose comme:

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

Pourquoi getParentFile et pas seulement mkdirs? – sauperl

+22

@sauperl: Parce que cela créerait un * répertoire * appelé 'filename.txt' ... –

15

Utilisez File.mkdirs().

+1

+1: citer les docs – ted

+1

qui va créer un _directory_ 'C: \\ user \ Desktop \ dir1 \ dir2 \ nom de fichier. txt \ '. –

+0

@ MartinSchröder: Seulement si vous conservez le composant de nom de fichier. –

22

Utilisation 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

Utilisez FileUtils pour gérer tous ces maux de tête. Editer: Par exemple, utilisez le code ci-dessous pour écrire dans un fichier, cette méthode va 'vérifier et créer le répertoire parent s'il n'existe pas'.

openOutputStream(File file [, boolean append]) 
+1

S'il vous plaît, pourriez-vous être plus précis? – Jean

+0

Bonjour Jean, Modifié. Il y a tout un tas d'autres méthodes utiles sous FileUtils. Les classes Apache Commons IO telles que OIUtils et FileUtils facilitent la vie des développeurs Java. – kakacii

+0

Je suis d'accord FileUtils est un bon moyen d'y aller, mais je pense que le plus simple est d'utiliser writeStringToFile, pas openOutputStream. Par exemple. Fichier fichier = nouveau fichier ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (fichier, "foo bar baz", true); – paul

92

Depuis Java 1.7, vous pouvez utiliser Files.createFile:

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

Important pour garder à l'esprit que les chemins relatifs peuvent entraîner une nullité exception de pointeur. 'Chemin pathToFile = Paths.get (" monFichier.txt "); Files.createDirectories (pathToFile.getParent()); ' – Mag