2009-10-12 4 views
4

L'un de nos clients utilise un logiciel de sécurité Novel qui verrouille parfois certains fichiers .class créés par notre logiciel. Cela provoque des problèmes désagréables pour eux lorsque cela se produit et j'essaie de trouver une solution de contournement que nous pourrions ajouter à notre gestion des erreurs pour résoudre ce problème quand il se présente. Je me demande s'il y a des appels dans l'API Java qui peuvent être utilisés pour détecter si un fichier est verrouillé, et si c'est le cas, déverrouillez-le.Verrouillage et déverrouillage de fichiers à l'aide de l'API Java

+1

Voulez-vous dire que le logiciel utilise les fichiers .class, et qu'ils ne peuvent donc pas être modifiés? Ou voulez-vous dire des choses comme troupeau (2)? – abyx

Répondre

1

Avant d'essayer d'écrire dans un fichier, vous pouvez vérifier si le fichier est accessible en écriture pour votre application Java en utilisant File.canWrite(). Cependant, vous pouvez toujours rencontrer un problème si l'application tierce verrouille le fichier entre votre vérification File.canWrite() et lorsque votre application tente réellement d'écrire. Pour cette raison, je voudrais coder votre application simplement pour aller de l'avant et essayer d'écrire dans le fichier et attraper ce que l'exception est levée lorsque le fichier est verrouillé. Je ne crois pas qu'il existe un moyen Java natif pour déverrouiller un fichier qui a été verrouillé par une autre application. Vous pouvez exécuter une commande shell en tant qu'utilisateur privilégié pour forcer les choses mais cela semble inélégant.

0

File.canWrite() a la condition de concurrence mentionnée par Asaph. Vous pouvez essayer FileChannel.lock() et obtenir un verrou exclusif sur le fichier. Tant que le .class est sur votre disque local, cela devrait fonctionner correctement (le verrouillage de fichier peut être problématique sur les disques en réseau). Sinon, selon la façon dont le nom de classe .class est découvert, vous pouvez créer un nouveau nom pour votre classe .class à chaque fois; alors si le logiciel anti-virus bloque votre classe initiale, vous pouvez toujours créer le nouveau. Que voulez-vous dire par "verrouillage d'un fichier"?

Questions connexes