Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Sprawdzanie czy plik został zmodyfikowany

Mam aplikację, która musi cyklicznie sprawdzać czy pewne pliki konfiguracyjne na dysku nie zostały zmodyfikowane, a jeżeli tak, to przeładowywać je. Oczywiście wszystko działać musi szybko, wydajnie, w osobnych wątkach i z pełną synchornizacją Plików jest kilka i zmieniają się bardzo często (co kilka minut).

Niby prosty problem, ale pytanie niemal filozoficzne - jak byście podeszli do tego zagadnienia:

1) Wydłubać coś prostego samemu (scheduler + job sprawdzający timestampy plików w odstępie czasu). Przy okazji raz w roku przy zmianie czasu "do tyłu" (jesienią) może być problem, że zmiany nie zostaną przez godzinę wykryte.

2) Użyć Commons VFS - z tego co widzę projekt jest od dawna nieaktualizowany, warto?

3) JDK7 ma to obsługiwać out-of-the-box w NIO2, ale tyle czekać nie mogę ;)

4) A może podpatrzeć jak to robi np. Tomcat i wyciągnąć rozwiązanie ze źródeł?

Jak myślicie? Nie startować z armatą na wróbla i napisać roziwzanie 1) czy poszukać jakiejś biblioteki która to usprawni?

konto usunięte

Temat: Sprawdzanie czy plik został zmodyfikowany

Klasa File i metoda lastModified. Zwraca longa.

A long value representing the time the file was last modified, measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970)

Jeśli to nie jest satysfakcjonujące to polecam google.
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Sprawdzanie czy plik został zmodyfikowany

Proponuje: http://jpathwatch.sourceforge.net/
Maciej R.

Maciej R. Developer on foot,
onFoot IT

Temat: Sprawdzanie czy plik został zmodyfikowany

Bym zastosował rozwiązanie, którego implementację zaproponował Adrian - kazać systemowi plików powiadamiać o zmianach.

W ten sposób unikasz i problemów ze zmianą czasu, jak i nie generujesz niepotrzebnegu "ruchu" pytając co chwilę czy coś się zmieniło.

Ale jeśli chcesz prostsze rozwiązanie i/albo na docelowym systemie taki jpathwatch może nie działać, to można np. tworzyć hash MD5 lub SHA1 pliku konfiguracyjnego i porównywać zapisany z uzyskanym ze sprawdzanego właśnie pliku. Jeśli pliki konfiguracyjne nie są za duże, nie będzie to duży wysiłek dla systemu, a też unikniesz konieczności uwzględniania szczególnych okoliczności, jak zmiana zegara systemowego w wyniku okresowej zmiany czasu lub nawet skorygowania zegara przy synchronizacji z serwerem czasu.

A jeśli hashe nie wchodzą w grę, bo np. za duże obciążenie, to można pobierać aktualne ustawienia strefy czasowej, konwertować do UTC czas aktualizacji pliku oraz bieżący i w ten sposób porównywać te czasy. Wtedy przynajmniej zmiana czasu jesienią nie będzie miała żadnego wpływu.Maciej Rutkowski edytował(a) ten post dnia 13.06.11 o godzinie 15:15
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Sprawdzanie czy plik został zmodyfikowany

Dzięki za podpowiedzi, jpathwatch to chyba będzie Miś na miarę naszych potrzeb ;)

Jak widać po pytaniu zasięgnąłem wcześniej opinii wujka google i tylko zastanawiałem się, czy kombinowanie mocniej niż zwykłe lastModified z File nie jest porywaniem się z armatą na wróbla.

Następna dyskusja:

Czy oplaca sie zdawac SCBCD...




Wyślij zaproszenie do