views:

1702

answers:

4

I'm looking for a Java library which can notify me about changes on the file system.

I found some free libraries, but they all use brute-force detection, i.e. polling in regular intervals. And the other ones are always commercial.

What I'm looking for is a library which uses the file monitor functions from the OS, i.e. FindFirstChangeNotification for Win32, FAM for Linux and whatever is available on other OS. I don't mind if brute-force is used as fallback, but for Windows and Linux it should use the available OS features.

+1  A: 

Why does it have to be Java?

The Library that is going to use platform specific API must have native code, so essentially the library is going to be wrappers around the native code that makes the usage of the different APIs transparent.

I suggest if you do not find the Library your self then you will have to either use brute force as you call it, or call the native API using JNI for each platform.

hhafez
Yes, that is essentially what such a library would be, a wrapper. But I was hoping that something like that already exists. (It exists, but not free/open source)
DR
+7  A: 

JNotify seems to do what you require.

Polling a filesystem (say, a directory for update time changes) won't impose a significant load on your system, and shouldn't be discounted. Apps like Tomcat etc. use this for managing hot deploys with few problems.

It's not a lot of help now, but the upcoming Java 7 has a WatchService precisely for this.

Brian Agnew
+1  A: 

If you are comfortable working on the bleeding edge of Java, have a look at JSR 203: More New I/O APIs aka nio2 which is due out in Java 7.

A new filesystem interface that supports bulk access to file attributes, change notification, escape to filesystem-specific APIs, and a service-provider interface for pluggable filesystem implementations;

Stu Thompson
A: 

jpathwatch is another option. It implements Java 7′s API for directory monitoring, so it is easy to port to Java 7 if desired.

mumhero