View Full Version : [JAVA] monitorare files
Oceans11
23-02-2008, 13:21
Salve a tutti,
è possibile monitorare file tramite un'applicazione java??
avevo pensato ad un'applicazione tipo daemon che ogni tot mi rilegge completamente il file e lo confronta con quello che tiene in memoria....purtroppo però non mi sembra così efficiente....soprattutto se i file da monitorare sono di una certa dimensione.
la cosa a cui tengo cmq è che mi controlli le differenze a determinati istanti di tempo, nel senso:
- lancio il demone che carica il file in mem
- controlla se sono avvenuti cambiamenti ogni tot secondi
- salva differenze su file
avete suggerimenti?
grazie
Calcolare l'impronta MD5 del file dovrebbe essere più veloce che fare il confronto byte per byte.
Io l'ho usato con tutt'altro scopo ma dovrebbe venirti bene, sfortunatamente non ho esempi da darti :)
Oceans11
26-02-2008, 11:32
sì però io vorrei tenere sempre (instantaneamente) traccia delle modifiche effettuate.
mi spiego meglio...vorrei (se possibile) che l'applicazione mi dicesse: "Guarda che il tuo file è stato appena cambiato ai byte x, y e z"....
ringrazio per la risposta
Salve a tutti,
è possibile monitorare file tramite un'applicazione java??
avevo pensato ad un'applicazione tipo daemon che ogni tot mi rilegge completamente il file e lo confronta con quello che tiene in memoria....purtroppo però non mi sembra così efficiente....soprattutto se i file da monitorare sono di una certa dimensione.
la cosa a cui tengo cmq è che mi controlli le differenze a determinati istanti di tempo, nel senso:
- lancio il demone che carica il file in mem
- controlla se sono avvenuti cambiamenti ogni tot secondi
- salva differenze su file
avete suggerimenti?
grazie
Potresti non farlo ogni tot secondi per tutti i file, ma solo quando un singolo file e' effettivamente cambiato.
Il sistema operativo ha a disposizione quelli che sono i FileSystemWatcher, ovvero classi che ti avvisano quando e' successo qualcosa negli oggetti che conti di monitorare.
I FileSystemwatcher sono integrati e diposnibili nel framework per i linguaggi .net, non so se c'e' l'analogo in Java.
Sicuramente il "traffico" si alleggerirebbe.
Da quel che ho letto, in 5 min scarsi, non esiste un corrispettivo java dei FileSystemWatcher poiché su sistemi unix non funzionerebbero alcuni casi; ovviamente una ricerca più approfondita potrebbe smentire quanto da me detto ;)
La mia proposta era di verificare, tramite calcolo dell'impronta MD5, se il file era modificato e solo successivamente fare il confronto byte per byte in modo da ottimizzare i tempi :)
Oceans11
26-02-2008, 17:55
quindi a quanto ho capito potrei cmq fare una chiamata tramite jni ad una funzione che mi avverte ad ogni cambiamento di file giusto????
se è così sarebbe perfetto (portabilità a parte, ma me ne frego perchè è una cosa che serve a me :D )
mi potreste fare un esempio di FileSystemWatcher oppure suggerirmi qualche link?
quindi a quanto ho capito potrei cmq fare una chiamata tramite jni ad una funzione che mi avverte ad ogni cambiamento di file giusto????
se è così sarebbe perfetto (portabilità a parte, ma me ne frego perchè è una cosa che serve a me :D )
mi potreste fare un esempio di FileSystemWatcher oppure suggerirmi qualche link?
Penso che TuX2K6 intendesse che in Java non ha trovato librerie gia' fatte per il FileSystemWatcher di Windows.
Il concetto comunque sarebbe leggermente diverso. E' il fileSystemWatcher che chiama una tua funzione ogni volta che l'oggetto da monitorare cambia.
Non so suggerirti alcun link per il Java.
Per il C# invece puoi leggere qui:
http://msdn2.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
Quando il (o i) file che stai monitorando viene cambiato, allora viene chiamato la funzione Change, dentro cui puoi scrivere il codice che ti serve.
Ovviamente dovrai risolvere altri problemi, come p.es. non potrai avere accesso a quel file fintantoche' e' in scrittura da parte del processo che ha effettuato il cambiamento. Ma la strada per evitare il polling del filesystem e' questa.
^TiGeRShArK^
26-02-2008, 22:39
Penso che TuX2K6 intendesse che in Java non ha trovato librerie gia' fatte per il FileSystemWatcher di Windows.
Il concetto comunque sarebbe leggermente diverso. E' il fileSystemWatcher che chiama una tua funzione ogni volta che l'oggetto da monitorare cambia.
Non so suggerirti alcun link per il Java.
Per il C# invece puoi leggere qui:
http://msdn2.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
Quando il (o i) file che stai monitorando viene cambiato, allora viene chiamato la funzione Change, dentro cui puoi scrivere il codice che ti serve.
Ovviamente dovrai risolvere altri problemi, come p.es. non potrai avere accesso a quel file fintantoche' e' in scrittura da parte del processo che ha effettuato il cambiamento. Ma la strada per evitare il polling del filesystem e' questa.
:fiufiu:
:asd:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.