code: private void determineChangesSince(File file, long lastScanTime) {
  		try {
  			if (GlobalConfiguration.verboseMode && log.isLoggable(Level.INFO)) {
  				log.info("Firing file changed event " + file);
  			}
  			listener.fileChanged(file);
  			if (file.isDirectory()) {
  				File[] filesOfInterest = file.listFiles(new RecentChangeFilter(lastScanTime));
  				for (File f : filesOfInterest) {
  					if (f.isDirectory()) {
  						determineChangesSince(f, lastScanTime);
  					}
  					else {
  						if (GlobalConfiguration.verboseMode && log.isLoggable(Level.INFO)) {
  							log.info("Observed last modification time change for " + f + "  (lastScanTime="
  									+ lastScanTime + ")");
  							log.info("Firing file changed event " + file);
  						}
  						listener.fileChanged(f);
  					}
  				}
  			}
  		}
  		catch (Throwable t) {
  			if (log.isLoggable(Level.SEVERE)) {
  				log.log(Level.SEVERE, "FileWatcher caught serious error, see cause", t);
  			}
  		}
  	}
docs: /*
  problem is that we check some file X, it hasn't changed - we then take longer than interval to check all the
  other files we are watching.