zoukankan      html  css  js  c++  java
  • WatchService API实现监听文件系统中的文件变化(包括各级子目录)

    原文:https://blog.csdn.net/buptwds/article/details/44860625

    import java.io.File;
    import java.nio.file.FileSystems;
    import java.nio.file.Paths;
    import java.nio.file.StandardWatchEventKinds;
    import java.nio.file.WatchEvent;
    import java.nio.file.WatchKey;
    import java.nio.file.WatchService;
    import java.util.LinkedList;
    
    public class WatchServiceTest
    {
        public static void main(String[] args) 
                throws Exception{
    
            String filePath = ("E:\work");
    
            // 获取文件系统的WatchService对象
            WatchService watchService = FileSystems.getDefault().newWatchService();
            Paths.get(filePath).register(watchService 
                    , StandardWatchEventKinds.ENTRY_CREATE
                    , StandardWatchEventKinds.ENTRY_MODIFY
                    , StandardWatchEventKinds.ENTRY_DELETE);
    
            File file = new File(filePath);
            LinkedList<File> fList = new LinkedList<File>();
            fList.addLast(file);
            while (fList.size() > 0 ) {
                File f = fList.removeFirst();
                if(f.listFiles() == null)
                    continue;
                for(File file2 : f.listFiles()){
                        if (file2.isDirectory()){//下一级目录
                        fList.addLast(file2);
                        //依次注册子目录
                        Paths.get(file2.getAbsolutePath()).register(watchService 
                                , StandardWatchEventKinds.ENTRY_CREATE
                                , StandardWatchEventKinds.ENTRY_MODIFY
                                , StandardWatchEventKinds.ENTRY_DELETE);
                    }
                }
            }
    
            while(true)
            {
                // 获取下一个文件改动事件
                WatchKey key = watchService.take();
                for (WatchEvent<?> event : key.pollEvents()) 
                {
                    System.out.println(event.context() +" --> " + event.kind());
                }
                // 重设WatchKey
                boolean valid = key.reset();
                // 如果重设失败,退出监听
                if (!valid) 
                {
                    break;
                }
            }
        }
    }
  • 相关阅读:
    day4
    day3
    day2
    day1
    结对开发
    开课博客
    个人课程总结
    学习进度条-第八周
    学习进度条-第七周
    Fooks 电梯演讲
  • 原文地址:https://www.cnblogs.com/shihaiming/p/13445868.html
Copyright © 2011-2022 走看看