zoukankan      html  css  js  c++  java
  • Java学习笔记--监视目录变化

    1.在实际开发中可能会需要监视某个目录下的文件所发生的变化。
     
    2.在java7之前的做法
    在一个独立的线程中使用File类的listFiles方法来定时检查目录中的内容,并与之前的内容进行比较
     
    3.java7之后的做法
    NIO.2中提供了新的目录监视服务,使用这些服务可以在指定目录中的子目录或文件被创建、更新或者删除时得到事件的通知。
    基于这些通知,程序可以进行相应的处理
     
    4.被监听的对象要实现java.nio.file.Watchable接口,并通过register方法注册到表示监视服务的java.nio.file.Watchable接口的实现对象上
    注册时需要指定被监视对象感兴趣的事件类型。
    注册成功后,调用者可以得到一个表示这次注册行为的java.nio.file.Watchable接口的实现对象。
     
    5.通过WatchKey接口可以获取在对应的被监听对象上所产生的事件。
    每个事件用java.nio.file.WatchEvent接口来表示
     
    6.WatchService接口也提供了获取当前所有被监视对象上的可用事件。
    查询方式分为阻塞式和非阻塞式:
    阻塞式使用take方法,而非阻塞式使用poll方法。
    查询结果的返回值是WatchKey接口的实现对象。
    调用WatchKey接口的pollEvents方法可以得到对应被监视对象上所发生的所有事件
     
    例子:
    1. publicclass目录监视服务的使用示例{
    2. publicstaticvoid main(String[] args) throws IOException,InterruptedException{
    3. //WatchService接口的实现对象是由工厂方法创建的,需要从表示文件系统的java.nio.file.FileSystem类对象中得到。
    4. WatchService service =FileSystems.getDefault().newWatchService();
    5. //被监视的对象
    6. Path path =Paths.get("C:/Users/aming/Desktop");
    7. //注册监听事件
    8. //包括创建或者重命名(ENTRY_CREATE),更新(ENTRY_MODIFY)和删除(ENTRY_DELETE)
    9. path.register(service,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.OVERFLOW);
    10. while(true){
    11. WatchKey key = service.take();
    12. //pollEvents方法获取所有的事件
    13. for(WatchEvent<?> event:key.pollEvents()){
    14. //context方法的返回值表示的是事件上下文信息
    15. //在于目录内容变化相关的事件中,上下文信息是一个Path接口的实现对象
    16. Path createPath =(Path)event.context();
    17. //resolve方法:将当前路径当成父目录,而把参数中的路径当成子目录或者是其中的文件
    18. createPath = path.resolve(createPath);
    19. //获得文件的大小
    20. long size =Files.size(createPath);
    21. System.out.println(createPath +"==>"+ size);
    22. }
    23. //在处理完一个WatchKey接口实现对象中的全部事件后
    24. //需要通过reset方法来进行重置。
    25. //只有重置之后,新的产生的同类事件才有可能从WatchService接口实现对象中再次获取。
    26. key.reset();
    27. //如果希望取消对一个目录的监视
    28. //只需要调用对应的WatcKey接口实现对象的cancel方法即可
    29. key.cancel();
    30. }
    31. }
    32. }
     





  • 相关阅读:
    intellij idea 注册码
    python 爬虫
    打油诗
    vux 新建移动app步骤
    ubuntu支持中文配置
    pandas DataFrame 交集并集补集
    API精准定位IP地址
    Python获取本地位置和天气
    nginx配置uwsgi
    django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
  • 原文地址:https://www.cnblogs.com/xiao2/p/5728484.html
Copyright © 2011-2022 走看看