2010-10-08 40 views
3

Quel est le moyen le plus efficace de détecter une modification dans un fichier Java?Java: détection d'une modification dans un fichier (interrogation de fichier?)

J'ai lu à propos de l'interrogation de fichiers, cependant, l'approche d'interrogation présente un certain nombre d'inconvénients qui deviennent apparents lorsque le nombre de fichiers surveillés augmente. Je préfère ne pas utiliser l'interrogation, mais un certain nombre de solutions en ligne semblent pointer vers l'interrogation de fichiers comme méthode recommandée. J'espérais peut-être une solution de rappel de mise à jour de système de fichiers liée au système d'exploitation à la place - est-ce possible dans Linux et Windows? Étant donné que je n'ai actuellement l'intention de "regarder" que 2 fichiers, je suis toujours ouvert à une solution d'interrogation de fichiers. Idéalement, j'espère que l'interrogation de fichiers n'aura pas un grand impact sur les performances.

Je suis au courant de WatchService de Java 7 mais depuis que 7 n'a pas été officiellement publié, j'hésite à utiliser cette approche ou les bibliothèques JNI.

Très apprécié!

EDIT: Il semble que l'interrogation de fichiers soit la solution. Si quelqu'un peut recommander la manière la plus sûre/efficace d'implémenter l'interrogation de fichier, ce serait génial.

+0

pour quoi allez-vous l'utiliser? Transfert de fichier? – oluies

+0

Je prévois de créer un enregistreur en utilisant log4j. Donc, je voulais un moyen de surveiller les modifications apportées aux fichiers de configuration log4j afin que je puisse le recharger. – user459811

+0

dupliquer question.http: //stackoverflow.com/questions/3387634/java-detect-changes-in-filesystem – Emil

Répondre

1

Il n'y a pas de solution Java pour que le système d'exploitation vous avertisse lorsqu'un fichier est modifié. Cela peut être possible grâce à des appels natifs, mais chaque OS serait différent à cet égard, et il n'est certainement pas supporté par Java. Il faudrait beaucoup de codage personnalisé avec JNI - si c'est même possible.

Si vous utilisez la solution d'interrogation, tant que vous consultez la date de modification, cela devrait être assez rapide. Assurez-vous de ne pas laisser les références aux fichiers ouverts pendant de longues périodes. Fermez-les toujours entre les cycles d'interrogation pour vous assurer que vous ne créez pas de conflits.

+0

True. Toutes les solutions de rappel de mise à jour de système de fichiers liées au système d'exploitation que j'ai lues à propos de JNI, que je suis également contraint d'utiliser. Je suppose que l'interrogation des fichiers est! :) Maintenant, pour trouver la meilleure solution pour le faire. – user459811

+0

Personnellement, je voudrais juste écrire quelque chose de court, simple, et au point qui a fait exactement ce dont j'avais besoin. Je ne serais pas surpris si jpoller fonctionnait, ce que @Brent a suggéré. Jnotify semble avoir besoin de bibliothèques supplémentaires et je n'aime pas les solutions Java qui en ont besoin. –

+0

"Veillez à ne pas laisser les références aux fichiers ouverts pendant des périodes prolongées." Que voulez-vous dire en les fermant entre les cycles de vote pour éviter les conflits? Je pensais que je continuerais à interroger les fichiers à tout moment car il est impossible de savoir quand l'utilisateur voudra modifier le fichier, donc l'auditeur doit être prêt à détecter une telle activité à tout moment. Quand les cycles d'interrogation seront-ils en conflit s'il y a une instance ouverte à tout moment? Merci! :) – user459811