Créer automatiquement le chemin complet lors de l'écriture dans un nouveau fichier

246

Je veux écrire un nouveau fichier avec le FileWriter. Je l'utilise comme ceci:

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

Maintenant dir1et dir2actuellement n'existent pas. Je veux que Java les crée automatiquement s'ils ne sont pas déjà là. En fait, Java devrait configurer le chemin d'accès au fichier entier s'il n'est pas déjà existant.

Comment puis-je atteindre cet objectif?


la source

Réponses:

431

Quelque chose comme:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
Jon Skeet
la source
11
Pourquoi getParentFile et pas seulement mkdirs?
sauperl
Va-t-il remplacer le dossier précédent, si je réédite le même code avec un fichier frère différent?
surajs1n
1
@ surajs1n: Si le répertoire existe déjà, mkdirsne fera rien.
Jon Skeet
3
@sauperl: Si le fichier n'existe pas encore, mkdirs () supposera que tout ce qui est spécifié est un répertoire et le crée en tant que tel (vient de le tester). En utilisant getParentFile () , vous laissez la création du fichier lui-même au FileWriter .
h4nek
149

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);
cdmihai
la source
4
Il est important de garder à l'esprit que les chemins relatifs peuvent provoquer une exception de pointeur nul. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag
if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Testez si le répertoire existe déjà pour éviter les erreurs
Andre Nel
29

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);
Armand
la source
16

Utilisez File.mkdirs().

Marcelo Cantos
la source
1
Cela créera un répertoire `C: \\ user \ Desktop \ dir1 \ dir2 \ filename.txt`.
Martin Schröder
@ MartinSchröder: Seulement si vous conservez le composant de nom de fichier.
Marcelo Cantos
4

Utilisez FileUtils pour gérer tous ces maux de tête.

Modifier: Par exemple, utilisez le code ci-dessous pour écrire dans un fichier, cette méthode «vérifiera et créera le répertoire parent s'il n'existe pas».

openOutputStream(File file [, boolean append]) 
kakacii
la source
1
Pourriez-vous être plus précis?
Jean
Salut Jean, édité. Il y a tout un tas d'autres méthodes utiles sous FileUtils. Les classes IO Apache Commons telles que OIUtils et FileUtils facilitent la vie des développeurs Java.
kakacii
1
Je suis d'accord que FileUtils est une bonne façon de procéder, mais je pense que la manière la plus simple est d'utiliser writeStringToFile, et non openOutputStream. Par exemple, File file = new File ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (fichier, "foo bar baz", true);
paul
Merci pour ça . A rendu mon code beaucoup plus propre maintenant. Lien vers le récent javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu