Précédent   Forum du club des développeurs et IT Pro > Java > Général Java
Général Java Java SE, Java ME, APIs, Persistance, JDBC, Spring, XML. Avant de poster -> FAQ Java, Sources Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/11/2012, 03h44   #1
bseguin
Invité de passage
 
Homme Baptiste SEGUIN
Étudiant
Inscription : octobre 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Baptiste SEGUIN
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2012
Messages : 2
Points : 2
Points : 2
Par défaut Ecriture dans un fichier impossible

Bonjour,

A cette heure ci tout le monde doit être couché .. mais bon, je tente quand même de vous exposer mon problème.

Je souhaite écrire l'arborescence (Fichiers + Sous-repertoire) dans un fichier.txt.

Mon programme fonctionne partiellement, l'arborescence s'écrit dans la console, mais pas dans le fichier, je ne comprend pas pourquoi ..

Tentez de compiler ce code, vous vous rendrez vite compte du problème.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class ListerMusiques {
 
	private static void ListerEtEcrire (File file, int level) throws IOException
	{
		//Création du fichier texte qui va contenir l'arborescence du repertoire
		FileWriter writer = new FileWriter("C:\\ListeMusiques.txt");
 
		for (File f : file.listFiles())
	    {
	        for (int i = 0; i < level; i++)
			{
	        	System.out.print ("     ");
	        	writer.write("     ");	            
			}
 
	        if (f.isDirectory())
	        {
	            System.out.println ("" + f.getName() + "\r\n");
	            writer.write ("" + f.getName() + "\r\n");
	            ListerEtEcrire (f, level + 1);
	        }
	        else
	        {
	            System.out.println ("    " + f.getName() + "\r\n");
	            writer.write ("    " + f.getName() + "\r\n");
	        }
	    }
	    writer.close();
	}
 
	public static void main (String[] args) throws IOException
	{
		//Repertoire a explorer
		File file = new File ("C:\\Musiques");
	    ListerEtEcrire (file, 0);
	}
}
Je débute en java alors ne m'en voulez pas trop ..

Merci d'avance
bseguin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 10h23   #2
NoClassDefFound
Membre confirmé
 
Homme
Inscription : octobre 2011
Messages : 156
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 156
Points : 207
Points : 207
Le forum est fait pour ça, pas besoin de t'excuser.
Premièrement il manque l'appel à la méthode flush() au niveau du writer.
Ensuite, tu as un problème au niveau de ton appel récursif.
Dans le cas où f est un répertoire, tu rappelles ta méthode ListerEtEcrire et donc tu réinstancies ton FileWriter à chaque appel.
Une solution simple serait d'instancier ton FileWriter dans ta méthode main et de le passer en paramètres de ta méthode ListerEtEcrire, sans oublier le close() aussi dans la méthode main.
NoClassDefFound est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/11/2012, 16h31   #3
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 121
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 121
Points : 10 358
Points : 10 358
Envoyer un message via Skype™ à thelvin
Citation:
Envoyé par NoClassDefFound Voir le message
Premièrement il manque l'appel à la méthode flush() au niveau du writer.
Pas du tout puisqu'il y a un close(). flush() n'est utile que pour des cas très spécialisés.

+1 sur le reste
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
Partagez vos connaissances, mais aussi comment s'en servir.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2012, 19h36   #4
bseguin
Invité de passage
 
Homme Baptiste SEGUIN
Étudiant
Inscription : octobre 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Baptiste SEGUIN
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2012
Messages : 2
Points : 2
Points : 2
Merci à NoClassDefFound et thelvin pouv votre aide, en particulier à NoClassDefFound, car j'ai suivi ton conseil, et le problème est résolu.

J'ai donc 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 ... ) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
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();
	}
}

Encore merci à vous deux pour votre aide.

Bonne soirée
bseguin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h13.


 
 
 
 
Partenaires

Hébergement Web