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.
jpathwatch is another option. It implements Java 7′s API for directory monitoring, so it is easy to port to Java 7 if desired.
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.
Two more options that currently use polling:
However, because both projects have large active communities, they will likely be updated in the future to support the Java 7 WatchService (FileSystem.newWatchService()), which does use the underlying platform's notification facilities, if any.
Both libraries also provide a useful abstraction layer for integrating with various other transports and systems, so that your main application code is not dependent on the inputs being received from a filesystem.
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.
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.