激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - JAVA 文件監(jiān)控 WatchService的示例方法

JAVA 文件監(jiān)控 WatchService的示例方法

2021-01-28 12:28jijs Java教程

本篇文章主要介紹了JAVA 文件監(jiān)控 WatchService的示例方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

概述

java1.7中 提供了WatchService來監(jiān)控系統(tǒng)中文件的變化。該監(jiān)控是基于操作系統(tǒng)的文件系統(tǒng)監(jiān)控器,可以監(jiān)控系統(tǒng)是所有文件的變化,這種監(jiān)控是無需遍歷、無需比較的,是一種基于信號收發(fā)的監(jiān)控,因此效率一定是最高的;現(xiàn)在Java對其進行了包裝,可以直接在Java程序中使用OS的文件系統(tǒng)監(jiān)控器了。

使用場景

  1. 場景一:比如系統(tǒng)中的配置文件,一般都是系統(tǒng)啟動的時候只加載一次,如果想修改配置文件,還須重啟系統(tǒng)。如果系統(tǒng)想熱加載一般都會定時輪詢對比配置文件是否修改過,如果修改過重新加載。
  2. 場景二:監(jiān)控磁盤中的文件變化,一般需要把磁盤中的所有文件全部加載一邊,定期輪詢一遍磁盤,跟上次的文件狀態(tài)對比。如果文件、目錄過多,每次遍歷時間都很長,而且還不是實時監(jiān)控。

而以上兩種場景就比較適合使用 WatchService 進行文件監(jiān)控。

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.io.IOException;
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.List;
 
public class FileWatchServiceDemo {
 
  public static void main(String[] args) throws IOException, InterruptedException {
    WatchService watchService = FileSystems.getDefault().newWatchService();
 
    String filePath = "D:/aa";
 
    Paths.get(filePath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
        StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
 
    while(true){
      WatchKey key = watchService.take();
      List<WatchEvent<?>> watchEvents = key.pollEvents();
      for (WatchEvent<?> event : watchEvents) {
        if(StandardWatchEventKinds.ENTRY_CREATE == event.kind()){
          System.out.println("創(chuàng)建:[" + filePath + "/" + event.context() + "]");
        }
        if(StandardWatchEventKinds.ENTRY_MODIFY == event.kind()){
          System.out.println("修改:[" + filePath + "/" + event.context() + "]");
        }
        if(StandardWatchEventKinds.ENTRY_DELETE == event.kind()){
          System.out.println("刪除:[" + filePath + "/" + event.context() + "]");
        }
        
      }
      key.reset();
    }
  }
}

1、使用 Path 來指定要監(jiān)控的目錄

2、Path.register() 方法注冊要監(jiān)控指定目錄的那些事件(創(chuàng)建、修改、刪除)

?
1
2
3
StandardWatchEventKinds.ENTRY_CREATE //創(chuàng)建
StandardWatchEventKinds.ENTRY_MODIFY //修改
StandardWatchEventKinds.ENTRY_DELETE //刪除

3、調(diào)用watchService.take(); 獲取監(jiān)控目錄文件的變化的WatchKey。該方法是阻塞方法,如果沒有文件修改,則一直阻塞。

4、遍歷所有的修改事件,并做相應處理。

5、完成一次監(jiān)控就需要重置監(jiān)控器。

不使用 WatchService 監(jiān)控的弊端

  1. 非常繁瑣,必須自己手動開啟一個后臺線程每隔一段時間遍歷一次目標節(jié)點并記錄當前狀態(tài),然后和上一次遍歷的狀態(tài)對比,如果不相同就表示發(fā)生了變化,再采取相應的操作,這個過程非常長,都需要用戶自己手動實現(xiàn);
  2. 效率低:效率都消耗在了遍歷、保存狀態(tài)、對比狀態(tài)上了!這是因為舊版本的Java無法很好的利用OS文件系統(tǒng)的功能,因此只能這樣笨拙地監(jiān)控文件變化;

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.jianshu.com/p/f20aba1ecae6?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
940
主站蜘蛛池模板: 久久综合久久综合久久 | 热99re久久免费视精品频软件 | 久草手机视频在线观看 | 免费国产精品视频 | 日韩剧情片| 亚洲午夜免费电影 | 一本色道久久综合狠狠躁篇适合什么人看 | 久久久久久久99 | 蜜桃一本色道久久综合亚洲精品冫 | 一级毛片免费观看 | 国产在线一级视频 | 99爱视频在线观看 | 在线视频 欧美日韩 | 麻豆porn | 美女色影院 | 免费在线看黄 | 日韩美香港a一级毛片 | 国产91一区二区三区 | 久久免费精品视频 | 久久久国产电影 | 国产精品一区二区三区在线播放 | 美女色影院 | 337p粉嫩大胆噜噜噜亚瑟影院 | 亚洲欧洲日产v特级毛片 | 国产精品亚洲一区二区三区在线观看 | 成人一级毛片 | 黄色免费小视频网站 | 亚洲欧美国产精品va在线观看 | 欧美成人午夜一区二区三区 | 免费黄网站在线播放 | 热99精品视频 | 免费在线观看国产 | 久久蜜桃香蕉精品一区二区三区 | 黄色片网站免费观看 | 免费嗨片首页中文字幕 | 欧美综合日韩 | 精品国产一区二区三区四区在线 | 成人性生活视频在线播放 | 91美女视频在线观看 | 91精品国产777在线观看 | 天天草天天色 |