经典指数          
原因
1826
浏览数
0
收藏数
 

如何在Linux中实时监控目录的变化?

     举报   纠错  
 
切换
1 个答案

java7中新增的nio.2

watchService有监听目录、文件修改、增加删除之类的功能

public class WatchServiceTest

{

    public static void main(String[] args) 

        throws Exception

    {

        /** 获取文件系统的WatchService对象

         * 以前的java版本中,如果程序需要监控文件变化,需要启动一条后台线程

         * 该线程每隔一段时间,去“遍历”一次指定目录的文件,如果发现此次遍历的结果与上次遍历结果不同,

         * 则认为了文件发生了变化,但这种方式十分繁琐,并且性能也不好

         */

        WatchService watchService = FileSystems.getDefault()

            .newWatchService();

        // 为/根路径注册监听

        Paths.get("/").register(watchService 

            , StandardWatchEventKinds.ENTRY_CREATE

            , StandardWatchEventKinds.ENTRY_MODIFY

            , StandardWatchEventKinds.ENTRY_DELETE);

        while(true)

        {

            /** 获取下一个文件改动事件

             * poll获取下一个wachKey,如果没有wachKey发生就返回null

             * poll(long timeout, TimeOut unit) 尝试等待timeout时间去获取下一个wachKey

             * take如果没有wachKey发生,就一直等待   如果程序需要一直监控,就用take

             * 如果是指定时间监控,就用poll

             */

            WatchKey key = watchService.take();    

            for (WatchEvent event : key.pollEvents()) 

            {//可以增加个Date

                System.out.println(event.context() +" 文件发生了 "

                    + event.kind()+ "事件!");

            }

            // 重设WatchKey

            boolean valid = key.reset();

            // 如果重设失败,退出监听

            if (!valid)  {

                break;

            }

        }

    }

}

 
切换
撰写答案