Pb: copie du contenu d'un repertoire dans un autre

cs_kam81 Messages postés 114 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 11 février 2009 - 9 juin 2007 à 11:24
tlaloctzin Messages postés 136 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 12 septembre 2013 - 13 juin 2007 à 07:51
salut,
je voudrais faire la copie du contenu d'un repertoire dans un autre, cette tâche dois se faire à chaque fois un fichier est inséré dans ce repertoire.pour celà j'utilise l'utilitaire JavaExe que j'integre à mon application pour pouvoir l'executer en tant que service windows; et au niveau de mon application je dois tester à chaque instant la presence d'un fichier dans le repertoire source; voici mon code :

public static void main(String[] args) {
             
         try
          {
         
           File f1=new File("d:\\source");
           f1.mkdir();
         
//Lister les fichiers du repertoire source            
           File[] liste= f1.listFiles();

      //Tant qu'il y a des fichiers dans le repertoire source
          while (liste.length >0) {
              
           for(int i=0;i<liste.length;i++)
           {
               File finput =new File("d:\\source\"+liste[i].getName());
               File foutput =new File("d:\\destination\"+liste[i].getName());
                     
               FileInputStream fin = new FileInputStream(finput);
               FileOutputStream fout = new FileOutputStream(foutput);
              
                while (fin.available()>0) fout.write(fin.read());
                fin.close();
                fout.close();
           }

   // Vider le repertoire source
           for(int j=0;j<liste.length;j++) liste[j].delete();
        
          }
          
       }catch(IOException ioe){ioe.printStackTrace(); }
    }
    Le probleme c'est que mon programme boucle sans arrêt.

3 réponses

cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
9 juin 2007 à 14:18
Salut,
je penses que le problème est que en faisant "liste[j].delete();" vous détruisez bien le fichier correspondant à "liste[j]", mais vous ne détruisez pas l'entrée correspondante dans le tableau "liste", la taille liste.length ne change pas (d'ailleurs elle ne change jamais).
Vous pouvez soit enlever la boucle "while (liste.length >0) {" dont je n'ai pas compris à quoi elle sert, soit faire un nouveau "liste= f1.listFiles();" à la fin de la boucle.
Voilà j'espère que c'était ça le problème.

http://kysicurl.free.fr/
0
cali70 Messages postés 71 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 19 mars 2008
9 juin 2007 à 16:37
rajouter un liste = f1.listFiles() à la fin ? oui pourquoi pas mais ca me semble faire beucoup de choses pour pas grand chose...
Pourquoi ne pas tout simplement faire liste = null ? et remplacer while (liste.length >0) par while (liste != null).
Je suis peu être à côté de la plaque mais ca me semble logique...
0
tlaloctzin Messages postés 136 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 12 septembre 2013 3
13 juin 2007 à 07:51
Bonjour ,
personellement j'aurais simplement enlevé la boucle

while (liste.length >0) {}

 , la methode

for(int i=0;i<liste.length;i++)

siffisant emplement non ?

Et à la rigueure faire une verrification a la fin de la methode for .
0
Rejoignez-nous