I have been using Apache Commons VFS2 for this purpose for long time without any issues in any OS. Basically you need a class to implement FileListener
interface that lets you do actions when adding/updating/deleting files from a directory:
public interface FileListener {
/**
* Called when a file is created.
*/
void fileCreated(FileChangeEvent event) throws Exception;
/**
* Called when a file is deleted.
*/
void fileDeleted(FileChangeEvent event) throws Exception;
/**
* Called when a file is changed.
*/
void fileChanged(FileChangeEvent event) throws Exception;
}
More info: Link to FileListener
Then you need to start the monitor for that file listener. Here you have an untested snippet on how to do it:
private void startMonitor() {
Logger logger = LogManager.getLogger(MyClass.class);
try {
FileSystemManager fileSystemManager = VFS.getManager();
FileObject dirToWatchFO = null;
String path = "dir/you/want/to/watch";
File pathFile = new File(path);
path = pathFile.getAbsolutePath();
dirToWatchFO = fileSystemManager.resolveFile(path);
DefaultFileMonitor fileMonitor = new DefaultFileMonitor(new MyFancyFileListener());
fileMonitor.setRecursive(false);
fileMonitor.addFile(dirToWatchFO);
fileMonitor.start();
} catch (FileSystemException e) {
logger.error("SOMETHING WENT WRONG!!", e);
}
}
I hope it helps!