+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2012
    Messages : 2
    Points : 1
    Points
    1

    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

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2011
    Messages : 204
    Points : 317
    Points
    317

    Par défaut

    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.

  3. #3
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 952
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 952
    Points : 16 521
    Points
    16 521

    Par défaut

    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.

  4. #4
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •