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

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

 更新時(shí)間: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)的動(dòng)態(tài)庫

簡介

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

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

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

  • Windows
  • Linux
  • Max OS

準(zhǔn)備式作

理論

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

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

提示:
Java有兩個(gè)Path,一個(gè)是classpath,另外一個(gè)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,多個(gè)監(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,多個(gè)監(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,多個(gè)監(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,多個(gè)監(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));
    }
}

在控制器中啟動(dòng)監(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個(gè)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實(shí)現(xiàn)針對指定目錄及其(動(dòng)態(tài))子目錄的監(jiān)聽的文章就介紹到這了,更多相關(guān)SpringBoot整合jnotify目錄監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Java 中This用法的實(shí)例詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

    springboot3如何接入nacos

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

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

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

最新評論

天全县| 当阳市| 桑日县| 平舆县| 满洲里市| 西吉县| 宜丰县| 长寿区| 温州市| 柳林县| 东乡族自治县| 卢氏县| 太保市| 德安县| 长治县| 郧西县| 桦南县| 盘锦市| 阿图什市| 双柏县| 新沂市| 海南省| 文水县| 乐业县| 灵寿县| 德兴市| 岳池县| 手游| 岢岚县| 寿光市| 修武县| 叶城县| 奈曼旗| 武夷山市| 日喀则市| 成都市| 嘉禾县| 辽源市| 锦州市| 当雄县| 中西区|