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;
                }
            }
        }
    }
  • 相关阅读:
    机会的三种境界
    常用“快”捷键
    心路历程
    中兴笔试及答案
    浅谈oracle中row_number() over()分析函数用法
    IE的F12开发人员工具不显示问题
    1002.A + B Problem II --大数问题
    6470.count --快速矩阵幂
    4151.电影--贪心
    3070.斐波拉契数列--快速幂
  • 原文地址:https://www.cnblogs.com/shihaiming/p/13445868.html
Copyright © 2011-2022 走看看