91 votes

Je peux ' t supprimer un fichier en java

Je suis en train de supprimer un fichier, après avoir écrit quelque chose en elle, avec FileOutputStream. C'est le code que j'utilise pour écrire:

private void writeContent(File file, String fileContent) {
    FileOutputStream to;
    try {
        to = new FileOutputStream(file);
        to.write(fileContent.getBytes());
        to.flush();
        to.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Comme on le voit, je tire la chasse et de fermer le flux de données, mais lorsque je tente de supprimer, file.delete() renvoie la valeur false.

J'ai vérifié avant la suppression de voir si le fichier existe, et: file.exists(), file.canRead(), file.canWrite(), file.canExecute() tous les renvoie la valeur true. Juste après l'appel de ces méthodes j'essaie file.delete() et renvoie la valeur false.

Est-il rien de ce que j'ai fait de mal?

104voto

Da Martin Points 481

Un autre bug dans Java. J’ai rarement trouver, seulement ma deuxième dans ma carrière de 10 ans. Il s’agit de ma solution, comme d’autres l’ont mentionné. J’ai du néant utilisé `` . Mais ici, dans mon cas, il est absolument crucial. Bizarre ? OUI !

49voto

Jenny Smith Points 1007

C’était assez bizarre l’astuce qui a fonctionné. La chose est quand j’ai déjà lu le contenu du fichier, j’ai utilisé BufferedReader. Après avoir lu, j’ai fermé le tampon.

Pendant ce temps je suis passé et je suis en train de lire le contenu en utilisant FileInputStream. Aussi après avoir lu j’ai fermer le flux. Et maintenant ça fonctionne.

Le problème est que je n’ai pas l’explication pour cela.

Je ne sais pas BufferedReader et FileOutputStream incompatible.

19voto

Kislay Sinha Points 81

J’ai essayé cette chose simple, et il semble fonctionner.

Ça marche pour moi.

6voto

Sai Manoj Points 41

Avant d'essayer de supprimer/renommer un fichier, vous devez vous assurer que tous les lecteurs ou écrivains (par ex: BufferedReader/InputStreamReader/BufferedWriter) sont correctement fermées.

Lorsque vous essayez de lire/écrire vos données depuis/vers un fichier, le fichier est tenu par le processus et de ne pas libéré jusqu'à ce que l'exécution du programme est terminée. Si vous souhaitez effectuer le supprimer/renommer des opérations avant la fin du programme, alors vous devez utiliser l' close() méthode qui vient avec l' java.io.* les classes.

3voto

Jon Skeet Points 692016

Vous clôturez uniquement le fichier si vous arrivez à la fin de la bloc sans lever d’exception. Vous devez le fermer un bloc à la place... c’est possible c’est ça le problème, si une exception a été levée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X