Ecriture dans un fichier impossible
Résolu/Fermé
Robin
-
11 nov. 2012 à 03:28
Hacker_Vaillant Messages postés 1 Date d'inscription dimanche 11 novembre 2012 Statut Membre Dernière intervention 11 novembre 2012 - 11 nov. 2012 à 19:39
Hacker_Vaillant Messages postés 1 Date d'inscription dimanche 11 novembre 2012 Statut Membre Dernière intervention 11 novembre 2012 - 11 nov. 2012 à 19:39
A voir également:
- Ecriture dans un fichier impossible
- Fichier rar - Guide
- Écriture facebook - Guide
- Fichier host - Guide
- Téléchargez cette archive (dossier compressé). en extraire tous les fichiers dans un dossier local. quel fichier contient l’expression trouverpix ? ✓ - Forum Windows
- Ecriture instagram - Guide
2 réponses
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
Modifié par KX le 11/11/2012 à 14:26
Modifié par KX le 11/11/2012 à 14:26
Le problème c'est que tu appelles récursivement ta méthode qui ouvre toujours le même fichier "C:\\ListeMusiques.txt".
Donc quand tu arrives au level+1, ton fichier est déjà ouvert au level+0, ce qui pose bien sûr quelques problèmes d'accès en écriture.
Il faudrait toujours donc garder le même flux ouvert.
Il y a aussi d'autres détails qui sont pas terribles dans ton code, comme ta boucle sur les level, alors qu'il suffirait d'accumuler des caractères sur une String, ainsi que la répétition inutile des mêmes opérations dans ton if et dans ton else :
Remarque : "write" force l'écriture, ce qui est une perte de temps en comparaison de "append" qui ajoute les données à une liste qui attendra qu'il y ait suffisamment de données pour écrire (dans tous les cas le "close" assure que tout est écrit à la fin).
La confiance n'exclut pas le contrôle
Donc quand tu arrives au level+1, ton fichier est déjà ouvert au level+0, ce qui pose bien sûr quelques problèmes d'accès en écriture.
Il faudrait toujours donc garder le même flux ouvert.
Il y a aussi d'autres détails qui sont pas terribles dans ton code, comme ta boucle sur les level, alors qu'il suffirait d'accumuler des caractères sur une String, ainsi que la répétition inutile des mêmes opérations dans ton if et dans ton else :
private static final String alinea = " ";
private static final String endl = System.lineSeparator();
public static void listerEtEcrire(String dossierALister, String nomDuFichierResultat) throws IOException
{
FileWriter writer = new FileWriter(nomDuFichierResultat);
listerEtEcrire(new File(dossierALister),"",writer);
writer.close();
}
private static void listerEtEcrire(File path, String level, FileWriter writer) throws IOException
{
for (File f : path.listFiles())
{
System.out.println(level+f.getName());
writer.append(level).append(f.getName()).append(endl);
if (f.isDirectory())
listerEtEcrire(f,level+alinea,writer);
}
}
public static void main (String[] args) throws IOException
{
listerEtEcrire("C:\\Musiques","C:\\ListeMusiques.txt");
}
Remarque : "write" force l'écriture, ce qui est une perte de temps en comparaison de "append" qui ajoute les données à une liste qui attendra qu'il y ait suffisamment de données pour écrire (dans tous les cas le "close" assure que tout est écrit à la fin).
La confiance n'exclut pas le contrôle
Hacker_Vaillant
Messages postés
1
Date d'inscription
dimanche 11 novembre 2012
Statut
Membre
Dernière intervention
11 novembre 2012
11 nov. 2012 à 19:39
11 nov. 2012 à 19:39
Merci pour ta réponse, j'ai réussi à régler mon problème, le problème est résolu.
J'ai instancier mon FileWriter dans ma méthode main et je le passe en paramètres de ma méthode ListerEtEcrire, sans oublier le close dans ma méthode main.
Je met le code complet (sait-on jamais, si quelqu'un a le même problème que moi ... ) :
Merci pour ton aide.
Bonne soirée ;)
J'ai instancier mon FileWriter dans ma méthode main et je le passe en paramètres de ma méthode ListerEtEcrire, sans oublier le close dans ma méthode main.
Je met le code complet (sait-on jamais, si quelqu'un a le même problème que moi ... ) :
public class ListerMusiques {
private static void ListerEtEcrire (File file, int level, FileWriter writer) throws IOException
{
for (File f : file.listFiles())
{
for (int i = 0; i < level; i++)
{
System.out.print ("\t");
writer.write("\t");
}
if (f.isDirectory())
{
System.out.println ("" + f.getName());
writer.write ("" + f.getName() + "\r\n");
ListerEtEcrire (f, level + 1, writer);
}
else
{
System.out.println ("\t" + f.getName());
writer.write ("\t" + f.getName() + "\r\n");
}
}
}
public static void main (String[] args) throws IOException
{
FileWriter writer = new FileWriter("C:\\ListeMusiques.txt");
System.out.println ("MES MUSIQUES");
System.out.println ("--------------------------------------------\r\n");
writer.write ("MES MUSIQUES");
writer.write ("--------------------------------------------\r\n");
//Repertoire a explorer
File file = new File ("C:\\Musiques");
ListerEtEcrire (file, 0, writer);
writer.close();
}
}
Merci pour ton aide.
Bonne soirée ;)