112 votes

Écouteur de fichiers a changé en Java

Je voudrais être notifié lorsqu’un fichier a été modifié dans le système de fichiers. Je n’ai trouvé rien d’autre qu’un thread qui interroge la propriété fichier de lastModified et clairement, cette solution n’est pas optimale.

119voto

Stephen Denne Points 17031

J’ai écrit un analyseur de fichier journal avant, et j’ai trouvé que l’impact sur les performances du système de scrutin les attributs d’un fichier unique, quelques fois par seconde, est en réalité très faible.

Java 7, dans le cadre de NIO.2 a ajouté l' API WatchService

L’API WatchService est conçue pour les applications qui ont besoin d’être informé des événements de modification de fichier.

39voto

Telcontar Points 2329

J’utilise l’API de VFS de Apache Commons, voici un exemple de comment faire pour contrôler un fichier sans beaucoup d’impact en performance :

DefaultFileMonitor

27voto

André Points 4833

Il y a une lib appelé jnotify qui encapsule inotify sur linux et possède aussi un support pour windows. Jamais utilisé et je ne sais pas comment il est bon, mais il vaut la peine d’essayer, que je dirais.

24voto

Rutesh Makhijani Points 4838

Le faible niveau de, la seule façon de modéliser cet utilitaire est d'avoir un fil d'interrogation sur un répertoire et de maintenir une veille sur les attributs du fichier. Mais vous pouvez utiliser des modèles pour élaborer un adaptateur pour un tel utilitaire.

Par exemple, les serveurs d'application j2ee comme Tomcat et d'autres ont une fonction de chargement automatique où dès que le descripteur de déploiement de changements ou de la classe de servlet changements redémarrage de l'application.

Vous pouvez utiliser les bibliothèques de ces serveurs que la plupart du code de tomcat est réutilisable et opensource.

8voto

Christian Points 1422

Java communes-io a un FileAlterationObserver. Il fait du scrutin en combinaison avec un FileAlterationMonitor. Similaire à communes VFS. L’advantag est qu’il a beaucoup moins de dépendances.

Edit : moins dépendances n’est pas vrai, ils sont disponibles en option VFS. Mais il utilise java fichier au lieu de la couche d’abstraction VFS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X