J'écris un plugin Maven qui supprime et renomme divers fichiers en utilisant les méthodes JDK File.delete()
et File.renameTo(File)
.impossible de renommer ou supprimer des instances de fichier
À peu près toutes les deux fois que j'exécute le plug-in, l'une de ces opérations échoue et chaque fois qu'il échoue, il s'agit d'un fichier différent qui ne peut pas être supprimé ou renommé. Une explication évidente pour laquelle un fichier ne peut pas être supprimé est qu'un autre processus l'utilise (je suis sous Windows), mais je ne sais pas quel processus pourrait être responsable. Le fait que le problème ne puisse pas être reproduit suggère systématiquement un problème de threading, mais AFAIK, les plugins Maven sont exécutés dans un seul thread. Il est difficile d'obtenir des informations sur la cause du problème, car les méthodes mentionnées ci-dessus ne lancent pas d'exceptions, elles retournent simplement false.
Existe-t-il un moyen de détecter par programme un fichier verrouillé et le nom du processus contenant le verrou? Sinon, si quelqu'un a d'autres suggestions sur la façon de résoudre un problème tel que celui-ci, veuillez les envoyer.
Merci, Don
Difficile à dire sans voir aucun code. Quelques coups dans le noir: lorsque vous avez ouvert l'explorateur de fichiers de Windows et visualisez le fichier en question, vous ne pourrez peut-être pas le supprimer, car Explorer verrouille ce fichier. Êtes-vous sûr de fermer les flux d'E/S? Ne pas avaler des exceptions qui pourraient fournir des indices sur les raisons de l'échec? –