PDA

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

TuX2K6
23-02-2008, 13:42
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

gugoXX
26-02-2008, 11:39
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.

TuX2K6
26-02-2008, 11:51
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?

gugoXX
26-02-2008, 18:56
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:

gugoXX
27-02-2008, 00:01
Gia' visto eh?
:D