Existe-t-il un moniteur de système de fichiers sophistiqué pour Java qui est un logiciel libre ou open source?

Je recherche une bibliothèque Java qui puisse me notifier les modifications apscopes au système de fichiers.

J’ai trouvé des bibliothèques gratuites, mais elles utilisent toutes la détection de force brute, c’est-à-dire une scrutation à intervalles réguliers. Et les autres sont toujours commerciaux.

Ce que je recherche, c’est une bibliothèque qui utilise les fonctions de surveillance de fichiers du système d’exploitation, à savoir FindFirstChangeNotification pour Win32, FAM pour Linux et tout ce qui est disponible sur un autre système d’exploitation. Cela ne me dérange pas que la force brute soit utilisée comme solution de secours, mais pour Windows et Linux, elle doit utiliser les fonctionnalités du système d’exploitation disponibles.

JNotify semble faire ce dont vous avez besoin.

Interroger un système de fichiers (par exemple, un répertoire pour les changements d’heure de mise à jour) n’imposera pas une charge significative à votre système et ne devrait pas être négligé. Des applications comme Tomcat, etc., l’utilisent pour gérer des déploiements à chaud avec peu de problèmes.

Ce n’est pas beaucoup d’aide maintenant, mais le futur Java 7 a un WatchService précisément pour cela.

Si vous êtes à l’aise avec la pointe de la technologie Java, jetez un coup d’œil à JSR 203: Plus de nouvelles API d’E / S, appelées nio2, disponibles dans Java 7 .

Une nouvelle interface de système de fichiers qui prend en charge l’access en bloc aux atsortingbuts de fichier, la notification de modification , l’échappement d’API spécifiques au système de fichiers et une interface fournisseur de services pour les implémentations de système de fichiers enfichables;

jpathwatch est une autre option. Il implémente l’API de Java 7 pour la surveillance des répertoires. Il est donc facile de porter à Java 7 si vous le souhaitez.

Pourquoi faut-il que ce soit Java?

La bibliothèque qui utilisera une API spécifique à une plate-forme doit avoir un code natif. La bibliothèque sera donc essentiellement une enveloppe qui encapsulera le code natif, ce qui rendra transparente l’utilisation des différentes API.

Je suggère que si vous ne trouvez pas la bibliothèque vous-même, vous devrez soit utiliser la force brute que vous appelez, ou appeler l’API native en utilisant JNI pour chaque plate-forme.

Deux autres options utilisant actuellement la scrutation:

  • Composant de fichier Apache Camel
  • Observateur de fichiers d’intégration de spring

Cependant, étant donné que les deux projets ont de grandes communautés actives, ils seront probablement mis à jour à l’avenir pour prendre en charge Java 7 WatchService ( FileSystem.newWatchService () ), qui utilise les fonctionnalités de notification de la plateforme sous-jacente, le cas échéant.

Les deux bibliothèques fournissent également une couche d’abstraction utile pour l’intégration avec divers autres systèmes de transport et systèmes, de sorte que le code de votre application principale ne dépend pas des entrées reçues d’un système de fichiers.