最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合jnotify實現(xiàn)針對指定目錄及其(動態(tài))子目錄的監(jiān)聽的方法

 更新時間:2024年10月29日 10:38:05   作者:梁云亮  
本文介紹了JNotify這一Java庫在SpringBoot中的應(yīng)用,JNotify允許應(yīng)用程序監(jiān)聽文件系統(tǒng)事件,包括文件夾/文件的創(chuàng)建、刪除、修改和重命名,由于JNotify底層調(diào)用的關(guān)鍵部分是C語言開發(fā)的,所以在使用前需要在系統(tǒng)中加入相應(yīng)的動態(tài)庫

簡介

JNotify是讓應(yīng)用程序監(jiān)聽文件系統(tǒng)事件的Java庫,可以監(jiān)聽的事件例如:

  • 文件夾/文件創(chuàng)建
  • 文件夾/文件刪除
  • 文件夾/文件修改 (文件內(nèi)容被修改和文件夾被修改都可以檢測到)
  • 文件夾/文件重命名

支持操作系統(tǒng):

  • Windows
  • Linux
  • Max OS

準備式作

理論

因為Jnotify底層調(diào)用的關(guān)鍵部分是C語言開發(fā)的,所以需要在系統(tǒng)中加入jnotify_64bit.dll(64位) (Windows)或者libjnotify.so(linux)動態(tài)庫。

  • jnotify_64bit.dll(64位) 加入到System.getProperty(“java.library.path”)對應(yīng)的路徑中
  • libjnotify.so加入到啟動腳本的指定-Djava.library.path目錄中

提示:
Java有兩個Path,一個是classpath,另外一個library.path。

  • classpath是設(shè)置JDK的lib位置.
  • 而library.path是設(shè)置引用的非Java類包(如DLL,SO)的位置。

操作

下載JNotify文件并解壓

  • windows系統(tǒng):將jnotify_64bit.dll放到j(luò)dk的bin目錄下,也可以直接放到c:/windows目錄中
  • linux系統(tǒng):將libnotify.so放到j(luò)dk的bin目錄下

示例

第一步:Maven依賴

<dependency>
	<groupId>net.contentobjects.jnotify</groupId>
	<artifactId>jnotify</artifactId>
	<version>0.94</version>
</dependency>

第二步: 監(jiān)聽器

@Component
public class FileMonitorListener extends JNotifyAdapter {
    /**
     * 文件創(chuàng)建后調(diào)用
     *
     * @param watchId      監(jiān)視Id  初始為1,多個監(jiān)控程序以此加1
     * @param watchPath    被監(jiān)視的最上層路徑
     * @param relativePath 創(chuàng)建的文件相對watchPath的相對路徑
     */
    @Override
    public void fileCreated(int watchId, String watchPath, String relativePath) {
        System.out.println(String.format("watchId = [%s], 被監(jiān)視路徑 = [%s], 創(chuàng)建文件 = [%s]", watchId, watchPath, relativePath));
    }
    /**
     * 文件刪除后調(diào)用
     *
     * @param watchId      監(jiān)視Id 初始為1,多個監(jiān)控程序以此加1
     * @param watchPath    被監(jiān)視的最上層路徑
     * @param relativePath 刪除的文件相對watchPath的相對路徑
     */
    @Override
    public void fileDeleted(int watchId, String watchPath, String relativePath) {
        System.out.println(String.format("watchId = [%s], 被監(jiān)視路徑 = [%s], 刪除文件 = [%s]",
                watchId, watchPath, relativePath));
    }
    /**
     * 文件修改 (文件內(nèi)容被修改和文件夾被修改都可以檢測到)
     * @param watchId      監(jiān)視Id  初始為1,多個監(jiān)控程序以此加1
     * @param watchPath    被監(jiān)視的最上層路徑
     * @param relativePath 修改的文件相對watchPath的相對路徑
     */
    @Override
    public void fileModified(int watchId, String watchPath, String relativePath) {
        System.out.println(String.format("watchId = [%s], 被監(jiān)視路徑 = [%s], 修改文件 = [%s]",
                watchId, watchPath, relativePath));
    }
    /**
     * 文件重命名后調(diào)用
     *
     * @param watchId         監(jiān)視Id  初始為1,多個監(jiān)控程序以此加1
     * @param watchPath       被監(jiān)視的最上層路徑
     * @param oldRelativePath 修改前文件名(相對watchPath的相對路徑)
     * @param newRelativePath 修改后文件名(相對watchPath的相對路徑)
     */
    @Override
    public void fileRenamed(int watchId, String watchPath, String oldRelativePath, String newRelativePath) {
        System.out.println(String.format("watchId = [%s], 被監(jiān)視路徑 = [%s], 文件重命名: [%s] -> [%s]",
                watchId, watchPath, oldRelativePath, newRelativePath));
    }
}

在控制器中啟動監(jiān)聽

@RestController
@RequestMapping("/file")
public class FileMonitorController {
    @Resource
    private FileMonitorListener fileMonitorListener;
    @GetMapping("/v1/monitor")
    public ResultBean<Void> monitorDir() {
        //在新線程中開啟監(jiān)聽
        new Thread(() -> {
            try {
                beginWatch();
            } catch (JNotifyException e) {
                e.printStackTrace();
            }
        }).start();
        return ResultBeanUtil.<Void>success(null).setMsg("文件監(jiān)聽開啟成功");
    }
    private void beginWatch() throws JNotifyException {
        String path1 = "e:/test/001";
        String path2 = "e:/test/002";
        // 是否監(jiān)視子目錄
        boolean watchSubtree = true;
        // 需要監(jiān)視的文件變更類型,此處用4個bit位表示,類似linux的文件訪問權(quán)限
        int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;
        //添加監(jiān)聽
        int watchId1 = JNotify.addWatch(path1, mask, watchSubtree, fileMonitorListener);
        System.out.println("watchId1 = " + watchId1 + ", 開始監(jiān)視路徑:" + path1);
        // 添加監(jiān)聽
        int watchId2 = JNotify.addWatch(path2, JNotify.FILE_ANY, false, fileMonitorListener);
        System.out.println("watchId2 = " + watchId2 + ", 開始監(jiān)視路徑:" + path2);
    }
}

到此這篇關(guān)于SpringBoot整合jnotify實現(xiàn)針對指定目錄及其(動態(tài))子目錄的監(jiān)聽的文章就介紹到這了,更多相關(guān)SpringBoot整合jnotify目錄監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java通過證書訪問etcd的實現(xiàn)步驟

    java通過證書訪問etcd的實現(xiàn)步驟

    Etcd提供了多種語言的客戶端庫,本文主要介紹了java通過證書訪問etcd的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Java 中This用法的實例詳解

    Java 中This用法的實例詳解

    這篇文章主要介紹了 Java 中This用法的實例詳解的相關(guān)資料,希望通過本文大家能理解掌握this關(guān)鍵字的使用方法,需要的朋友可以參考下
    2017-09-09
  • Spring Security OAuth2 授權(quán)碼模式的實現(xiàn)

    Spring Security OAuth2 授權(quán)碼模式的實現(xiàn)

    這篇文章主要介紹了Spring Security OAuth2 授權(quán)碼模式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解Java基礎(chǔ)知識——JDBC

    詳解Java基礎(chǔ)知識——JDBC

    這篇文章主要介紹了Java基礎(chǔ)知識——JDBC,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java文件操作工具類fileUtil實例【文件增刪改,復(fù)制等】

    Java文件操作工具類fileUtil實例【文件增刪改,復(fù)制等】

    這篇文章主要介紹了Java文件操作工具類fileUtil,結(jié)合實例形式分析了java針對文件進行讀取、增加、刪除、修改、復(fù)制等操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Spring?JPA使用CriteriaBuilder動態(tài)構(gòu)造查詢方式

    Spring?JPA使用CriteriaBuilder動態(tài)構(gòu)造查詢方式

    這篇文章主要介紹了Spring?JPA使用CriteriaBuilder動態(tài)構(gòu)造查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java性能優(yōu)化之關(guān)于大對象復(fù)用的目標和注意點

    Java性能優(yōu)化之關(guān)于大對象復(fù)用的目標和注意點

    這篇文章主要介紹了Java性能優(yōu)化之關(guān)于大對象復(fù)用的目標和注意點,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 基于@RequestParam注解之Spring MVC參數(shù)綁定的利器

    基于@RequestParam注解之Spring MVC參數(shù)綁定的利器

    這篇文章主要介紹了基于@RequestParam注解之Spring MVC參數(shù)綁定的利器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • springboot3如何接入nacos

    springboot3如何接入nacos

    這篇文章主要介紹了springboot3接入nacos的配置方法,經(jīng)過很長時間的折騰終于搞定,下面把步驟操作過程分享給大家,需要的朋友可以參考下
    2024-03-03
  • mybatis-plus中更新null值的問題解決

    mybatis-plus中更新null值的問題解決

    本文主要介紹 mybatis-plus 中常使用的 update 相關(guān)方法的區(qū)別,以及更新 null 的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04

最新評論

临澧县| 北流市| 东源县| 神池县| 基隆市| 临猗县| 青海省| 陆川县| 大安市| 博野县| 甘洛县| 三门县| 玛纳斯县| 贡嘎县| 辰溪县| 大庆市| 石河子市| 屏山县| 武川县| 尚志市| 西宁市| 东海县| 梁河县| 永仁县| 东丽区| 高唐县| 丰城市| 凤庆县| 讷河市| 桃江县| 丰原市| 额尔古纳市| 瑞安市| 安仁县| 琼海市| 曲周县| 永康市| 奉新县| 新泰市| 沂源县| 保康县|