2011-04-22 4 views
3

J'ai un programme surveille les modifications du fichier journal. Le programme utilise un FileInputStream pour continuer à lire dans le fichier. Pendant ce temps, le fichier journal peut être pivoté: l'ancien fichier journal est renommé et les nouvelles entrées de journal sont écrites dans un nouveau fichier.Comment puis-je savoir si un fichier a été renommé?

Comment mon programme détermine-t-il que le fichier a été renommé afin qu'il passe en lecture dans le nouveau fichier journal?

+1

Si vous ne surveillez pas le système de fichiers pour les événements de modification, vous ne pouvez pas le faire. Quel système de fichiers/plate-forme développez-vous? –

+0

va renommer réussir si le fichier est ouvert et activement lu? – Bozho

+0

duplication possible de [Existe-t-il un moniteur de système de fichiers sophistiqué pour Java qui est un logiciel gratuit ou open source?] (Http://stackoverflow.com/questions/1096404/is-there-a-sophisticated-file-system-monitor-for -java-which-is-freeware-or-open-s) – krock

Répondre

5

Selon this question,JNotify sseems être la solution parfaite à votre problème:

JNotify est une bibliothèque java qui permet l'application java pour écouter le fichier des événements système, tels que:

fichier créé

fichier modifié

fichier renommé

Fichier supprimé

0

Peut-être que vous pouvez watch le système de fichiers et apporter des modifications en fonction de vos besoins.

+2

Oui, mais seulement s'il est en utilisant Java 7. Le paquet 'java.nio.file' n'existe pas dans Java 6 ou plus tôt. – darioo

+1

En fait il y a backports pour java.nio.file, comme cette question (http://stackoverflow.com/q/1096404/15619) réponses mentions – Riduidel

0

La manière la plus simple que je peux penser est simplement d'interroger la taille du fichier toutes les 5 secondes ou quelque chose comme ça.

Si le fichier que vous lisez a été renommé et qu'un nouveau fichier a été créé, votre relève affiche une diminution soudaine de la taille. Vous pouvez ensuite vous recréer FileinputStream en conséquence.

+0

JNotify et java.nio.file sonne bien, mais pour mon cas de sondage pour la taille du fichier est plus simple. – aleung

+0

Enfin, nous sommes passés à JNotify. C'est plus fiable que l'interrogation pour la taille du fichier. Si l'ancien fichier était vide, la rotation des fichiers ne peut pas être détectée en comparant la taille. – aleung

Questions connexes