Voici votre dernière tentative:
File_path = root + File.separator + day;
File f_dir = new File(File_path);
f_dir.mkdirs();
File file1 = new File(f_dir, File_name);
if (!file1.exists()) {
try {
file1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
OutputStream fos= new FileOutputStream(file1);
Si vous nous avez montré la complète stacktrace et un message d'erreur, il serait plus facile de comprendre ce qui va mal, mais je ne peux penser à deux possibilités:
- Vous ne vérifie pas la valeur renvoyée par
f_dir.mkdirs()
et il se peut que le résultat false
indique que le chemin de répertoire n'a pas été créé. Cela peut signifier que:
- Le répertoire existait déjà.
- Quelque chose existait mais ce n'était pas un répertoire.
- Une partie du chemin du répertoire n'a pas pu être créée ... pour l'une des nombreuses raisons possibles.
- L'appel
file1.exists()
retournera true
si quoi que ce soit existe avec ce chemin donné par l'objet. Le fait que quelque chose existe ne signifie pas nécessairement que vous pouvez l'ouvrir pour écrire:
- Ce pourrait être un répertoire.
- Il peut s'agir d'un fichier pour lequel l'application n'a pas les droits d'écriture.
- Il peut s'agir d'un fichier sur un système de fichiers en lecture seule.
- Et quelques autres choses.
Si j'écrivais cela, je l'écris quelque chose comme ceci:
File dir = new File(new File(root), day);
if (!dir.exists()) {
if (!dir.mkdirs()) {
System.err.println("Cannot create directories");
return;
}
}
File file1 = new File(dir, fileName);
try (OutputStream fos= new FileOutputStream(file1)) {
...
} catch (FileNotFoundException ex) {
System.err.println("Cannot open file: " + ex.getMessage());
}
Je ne tente de créer le répertoire si nécessaire ... et vérifiez que les la création a réussi. Ensuite, je tente simplement d'ouvrir le fichier pour y écrire. Si le fichier n'existe pas, il sera créé. S'il ne peut pas être créé, le message FileNotFoundException doit expliquer pourquoi.
Notez que j'ai également corrigé les erreurs de style que vous avez faites dans votre choix de noms de variables.
oui et aussi ajouter le chemin du dossier avec elle si le dossier est déjà quitter –
voir ma réponse modifier –
si et si tout mon chemin est 2 strigs comme dirName = root + devrais-je mettre ici: File.separator + day; – CVS