IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

java.io.File : Impossible d'effacer un fichier


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut java.io.File : Impossible d'effacer un fichier
    Bonjour,
    Lorsque je crée un répertoire, je n'ai pa de problème pour l'effacer. Par contre quand je crée un fichier f dans ce répertoire, f.delete() me renvoi false.

    Il est alors impossible d'effacer le répertoire.

    Je suppose que c'est hyper classique, mais je n'ai rien trouvé de concluant chez M.Google ou ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    File repCree = new File("D:/xml2/users/mdilazaro");
    assertTrue(repCree.isDirectory()); //OK
     
    //Je cree un document XML et cela cree le fichier
    XsDocument doc = factory.creeXsCourse();
     
    String path = doc.getPath();//Je verifie que le fichier est créé
    File f = new File(path);
    assertTrue(f.exists());//OK
    assertTrue(f.length() > 17);//OK
    assertTrue(f.delete()); // PAS OK
    A la fin, j'ai bien mon fichier dans le repertoire mdilazaro - A aucun moment je ne m'amuse à créer des protections de fichier. LE fichier est créé via JDOM ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    File f = new File(path);
    f.createNewFile();
    XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    sortie.output(doc , new FileOutputStream(f));

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    D'après la Javadoc de File.delete :
    If this pathname denotes a directory, then the directory must be empty in order to be deleted.
    Exemple de code pour supprimer un répertoire plein :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private void deleteDirectory(File racine) {
    	for (File fils : racine.listFiles()) {
    		if (fils.isDirectory()) {
    			deleteDirectory(fils);
    		} else {
    			fils.delete();
    		}
    	}
    	racine.delete();
    }

  3. #3
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    oui il faut d abord supprimer tous les fichiers du repertoire puis apres supprimer le repertoire ( une fois vide )
    ++

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Je cree un document XML et cela cree le fichier
    XsDocument doc = factory.creeXsCourse();
     
    String path = doc.getPath();//Je verifie que le fichier est créé
    File f = new File(path);
    Est ce que la factory libère bien les ressources après la création ?(voir close() dans les API IO)
    En effet si le fichier est utilisé par quelqu'un d'autre, delete() ne marchera pas.

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    En fait Java va plus vite que Windows .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Thread w = new Thread() {
     
                @Override
                public void run() {
                    try {
                        sleep(350);                    
                        File repCree = new File("D:/xml2/users/mdilazaro");
                        FileToolBox.deleteDirectory(repCree);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(XsCourseFactoryTest.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            };
            w.start();

  6. #6
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Finalement, ca a pas l'air trop lié au thread. Avec ces threads, des fois ca s'efface, des fois pas....

    En fait, ce qui est bizarre, c'est que c'est toujours le dernier fichier qui ne s'efface pas.

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Citation Envoyé par fnobb Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Je cree un document XML et cela cree le fichier
    XsDocument doc = factory.creeXsCourse();
     
    String path = doc.getPath();//Je verifie que le fichier est créé
    File f = new File(path);
    Est ce que la factory libère bien les ressources après la création ?(voir close() dans les API IO)
    En effet si le fichier est utilisé par quelqu'un d'autre, delete() ne marchera pas.

    Je n'avais pas closé le outputStream responsable de l'ecriture. J'ai modifié ainsi, mais sans aucun effet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FileOutputStream fos=new FileOutputStream(f);
            XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
            sortie.output(course, fos);
            fos.close();

    EDIT : Finalement après un clean/build de mon appli web, ca a l'air de bien fonctionner.
    Thanks !

  8. #8
    Invité de passage
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 1
    Par défaut
    Effectivement, le problème vient des fichier qui n'ont pas été fermés.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sourceFile = new FileInputStream(entree);
    destinationFile = new FileOutputStream(sortie);
    Fermeture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sourceFile.close();
    destinationFile.close();

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

Discussions similaires

  1. [java.io.File] problème pour renommer un fichier
    Par RR instinct dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/12/2010, 14h24
  2. [new File]Impossible de créer un fichier
    Par valal dans le forum Langage
    Réponses: 3
    Dernier message: 22/05/2007, 16h08
  3. Impossible d'effacer le fichier
    Par pracede2005 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 21/05/2007, 11h56
  4. Réponses: 11
    Dernier message: 21/11/2005, 16h08
  5. Impossible d'effacer un fichier
    Par MiJack dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 14/11/2005, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo