Comment diagnostiquer Fichier.supprimer() pour retourner false / trouver unclosed flux?

Je travaille avec une 3ème partie JPEG/EXIF de la manipulation de la bibliothèque (Mediautil) qui me causer quelques maux de tête. Je veux changer une image les données EXIF. Pour ce faire, j'ai besoin d'écrire la version mise à jour d'un fichier temporaire, de supprimer l'original et puis renommez le fichier temp pour le nom d'origine.

Mon problème est que le File.delete() appel échoue et renvoie false, sans doute parce que la bibliothèque, toujours ouvert, d'une certaine façon -, mais j'ai fait tout ce que je peux trouver dans l'API pour faire fermer tous les volets. Pire encore: le problème semble être la temporisation à charge, et les tests Unitaires, où il se produit parfois échouer et parfois non, mais le code est pas multithread.

Bizarrement, il y a un appel de la bibliothèque qui supprime le problème - mais il supprime également les infos EXIF miniature, dont je n'ai pas vraiment envie. Et en regardant le code, je ne peux absolument pas voir où il ferme les ruisseaux qui pourraient autrement rester ouvert.

Toutes les idées sur la façon de s'attaquer à ce problème?

Edit:
C'est sur Windows XP, la version 6 de Java. Et une autre chose: j'ai trouvé que si je l'appelle System.gc() avant d'appeler File.delete(), il fonctionne, sans doute parce que cela provoque des finalizer. De sorte qu'il semble être un unclosed flux.

Avez-vous un antivirus en cours d'exécution sur la machine? Parfois, l'AV peut temporairement ouvrir le fichier après que vous avez écrit, menant à la sporadiques comportement que vous mentionnez où, parfois, vous êtes "malchanceux" au moment où vous essayez de supprimer.
Sur quelle plate-forme?
bonne idée, mais la désactivation AV n'est pas de faire une différence.

OriginalL'auteur Michael Borgwardt | 2010-01-24