Dans une tentative de suppression d'un fichier après avoir utilisé FileOutputStream pour écrire du contenu, la méthode file.delete() renvoie false malgré la vérification existence et accessibilité des fichiers via file.exists(), file.canRead(), file.canWrite() et file.canExecute(). Ce comportement peut être attribué à un bug particulier dans Java.
La méthode writeContent() est correctement utilisée pour écrire du contenu dans le fichier et fermer le flux. Cependant, lors de la tentative de suppression du fichier, celle-ci échoue en raison de la persistance d'une référence au fichier par la machine virtuelle Java (JVM). Pour résoudre ce problème, System.gc() doit être invoqué avant de tenter la suppression. Cela force la JVM à effectuer un garbage collection, libérant la référence au fichier et permettant sa suppression.
Le code révisé avec System.gc() ajouté inclut :
finally { try { in.close(); in = null; out.flush(); out.close(); out = null; System.gc(); } catch (IOException e) { logger.error(e.getMessage()); e.printStackTrace(); } }
En appelant System .gc() dans le bloc enfin, la référence au fichier est supprimée, permettant à file.delete() de supprimer avec succès le fichier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!