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?

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

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

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


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.