ファイルディレクトリのJavaモニターの変更



Java Monitor Changes File Directory



Java監視ディレクトリの変更

1.jdk独自のツールを使用する

/** * jdk comes with monitoring file directory changes * @author love * */ public class WatchServiceTest { public static void main(String[] args) { final Path path = Paths.get('F:/test') try(WatchService watch=FileSystems.getDefault().newWatchService()){ path.register(watch, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY) while(true) { final WatchKey key = watch.take() for(WatchEvent<?> e:key.pollEvents()) { WatchEvent.Kind<?> kind = e.kind() if(kind==StandardWatchEventKinds.OVERFLOW) { continue } if(kind==StandardWatchEventKinds.ENTRY_CREATE) { System.out.println('create') } if(kind==StandardWatchEventKinds.ENTRY_DELETE) { System.out.println('delete') } if(kind==StandardWatchEventKinds.ENTRY_MODIFY) { System.out.println('modify') } WatchEvent<Path> watchPath = (WatchEvent<Path>)e Path filename = watchPath.context() System.out.println(kind + '---'+filename) } boolean valid = key.reset() if(!valid) { break } } }catch(Exception e){ e.printStackTrace() } } }

2. commons-io2.xバージョンをダウンロードします

Insert code snippet here /** * Use io package to monitor file changes * @author love * */ public class DirTest { /** * Test using io package * @author love * */ private static class FileListener extends FileAlterationListenerAdaptor{ @Override public void onFileCreate(File file) { System.out.println('file create....') } @Override public void onFileDelete(File file) { System.out.println('file delete....') } @Override public void onFileChange(File file) { System.out.println('file change...') } @Override public void onDirectoryChange(File directory) { System.out.println('onDirectoryChange') } @Override public void onDirectoryCreate(File directory) { System.out.println('onDirectoryCreate') } @Override public void onDirectoryDelete(File directory) { System.out.println('onDirectoryDelete') } @Override public void onStart(FileAlterationObserver observer) { // System.out.println('onStart') super.onStart(observer) } @Override public void onStop(FileAlterationObserver observer) { // System.out.println('onStop') super.onStop(observer) } } public static void main(String[] args) { String rootPath = 'F:/test' //Poll time 5s long interval = TimeUnit.SECONDS.toMillis(1) //Create a filter chain IOFileFilter directors = FileFilterUtils.and(FileFilterUtils.directoryFileFilter(),HiddenFileFilter.VISIBLE) IOFileFilter files = FileFilterUtils.and(FileFilterUtils.fileFileFilter(),FileFilterUtils.suffixFileFilter('.txt')) IOFileFilter filter = FileFilterUtils.or(directors,files) //Use filter chain FileAlterationObserver observer = new FileAlterationObserver(new File(rootPath), filter) //Do not use filter chain observer.addListener(new FileListener()) // FileAlterationObserver observer = new FileAlterationObserver(new File(rootPath)) //Create file change monitor FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer) try { monitor.start() } catch (Exception e) { e.printStackTrace() } } }