Problème d'écriture supplémentaire lors d'un couper coller en java

Résolu
Signaler
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008
-
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008
-
Bonjour excusez moi mais la je suis bloqué,

J'ai
créé un programme qui execute automatiquement un couper coller entre
deux répertoires de la même racine, et mon problème est que:

-
lors du couper coller le programme écrit un ÿ dans le fichier et je ne
comprend pas pourquoi c'est à dire que si j'ai test1 dans mon fichier
txt, après couper coller je me retrouve avec un test1ÿ

si quelqu'un peut modifier mon code et/ou me conseiller  je lui en serais  reconnaissant.

Voici mon code:

 package applicationcopiercoller;

//Importation des package utilisateur de l'API Java
import java.awt.Toolkit;
import java.io.*;
import javax.swing.*;
import javax.swing.JOptionPane;;

public class SurveillanceRepertoire extends javax.swing.JFrame {

(.... code alloué à la Jframe)
}
//Déclaration de la classe CheckAndCopy héritée du Thread
class CheckAndCopy extends Thread implements Runnable
{
   
    //Déclaration de variables
    static File toCut  = null ;
    static File toPast = null ;
   
    public CheckAndCopy()
    {
       
    }
    @Override
    public void run()
    {
        try
        {

            synchronized ( this )
            {
                while ( true )
                {
                    File[] srcList = SurveillanceRepertoire.srcDir.listFiles();
                       
                     //mise en place tableau
                     for ( int i = 0 ; i < srcList.length ; i ++ )
                        {
                            System.out.println(srcList[i].getAbsolutePath());
                   
                            //déclaration du type de fichier entrant
                            if (srcList[i].getAbsolutePath().endsWith(".txt"))
                            {
                                //Couper fichier(s) arrivant
                                toCut = srcList[i];
                           
                                //Coller fichier(s) sortant
                                toPast =new File
                                (SurveillanceRepertoire.desDir.getAbsolutePath()
                                +java.io.File.separator+toCut.getName());
                           
                                //Si l'objet toPast existe
                                if ( ! toPast.exists() )
                                {
                           
                                //Déclaration des flux d'entrer/sortie fos
                                //et fis pour permettre le transfert de fichier
                                FileInputStream fis =
                                        new FileInputStream(toCut);  
                                FileOutputStream fos =
                                        new FileOutputStream(toPast);
                           
                                    try
                                    {
                                        //Déclaration d'un entier f mis à 0
                                        int f = 0 ;
                                        //Tant que f est différent de -1
                                        while( f != -1 )
                                        {
                                            //On éxécute
                                            System.out.println(f+"");
                                            //Lecture en entrée
                                            f = fis.read();
                                            //Ecriture en sortie
                                            fos.write(f);
                                       
                                        }
                               
                                    }
                       
                                    finally
                                    {
                           
                                        fis.close();
                                        fos.flush();
                                        fos.close();
                                        //effacement du fichier source
                                        toCut.delete();

                                    }

                                }
                            }
                   
                    }
                    //Temps d'attente entre deux déplacements
                    wait(SurveillanceRepertoire.wait*1000);
                   
                   
                }
            }
        }
        //Gestion des éxceptions(erreur)
        catch ( Exception e)
        {
            e.printStackTrace();
            Toolkit.getDefaultToolkit().beep();
            JOptionPane.showMessageDialog(null , "Erreur \n"+e.getMessage()
                                          ,"Erreur",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    }   
}

Je
pense que l'écriture du ÿ se passe au moment de la réécriture dans le
nouveau répertoire mais je ne comprend pas comment cela est possible.

Merci d'avance parce que la je suis dépasser.

Beberto56.

3 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Le problème est ici :

                                        while( f != -1 )
                                        {
                                            //On éxécute
                                            System.out.println(f+"");
                                            //Lecture en entrée
                                            f = fis.read();
                                            //Ecriture en sortie
                                            fos.write(f);
                                       
                                        }

Si f == -1, tu sors de ta boucle (ok) mais juste avant tu écris quand même f dans le fichier de sortie... (pas ok).

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

Du coup, faut faire ça :

//Lecture en entrée

   f = fis.read();
   while( f != -1 ){
   //On éxécute
   System.out.println(f+"");
   //Ecriture en sortie
    fos.write(f);
//Lecture en entrée
  f = fis.read();
     }

gmi19oj19
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Bonjour,

je vous remerci tous les deux pour vos conseils qui m'ont été précieux
Mon programme tourne d'enfer.
Merci et a +.

Julien