日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法

發布時間:2024/9/27 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介Jnotiy, 支持動態監控(支持級聯監控)文件夾和文件的jar包。在linux中,調用linux底層的jnotify服務。在windows中,需要添加附件的dll文件。

因為通用的Maven倉庫中沒有此Jar文件,pom.xml文件需要如下配置:

net.contentobjects.jnotify

jnotify

0.94

bintray

http://dl.bintray.com/typesafe/maven-releases/

View Code

使用

首先從jar包中解目錄壓出dll文件,并放到工程lib/目錄下。比如

/project/lib/native_libraries/...

測試代碼

import java.lang.reflect.Field;

import java.util.Arrays;

import java.util.Properties;

import org.apache.log4j.Logger;

import net.contentobjects.jnotify.JNotify;

import net.contentobjects.jnotify.JNotifyException;

import net.contentobjects.jnotify.JNotifyListener;

public class TestJnotify {

static Logger log = Logger.getLogger(TestJnotify.class);

/**

* jnotify動態庫 - 32位

*/

static final String NATIVE_LIBRARIES_32BIT = "/lib/native_libraries/32bits/";

/**

* jnotify動態庫 - 64位

*/

static final String NATIVE_LIBRARIES_64BIT = "/lib/native_libraries/64bits/";

public static void main(String[] args) throws JNotifyException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {

log.debug("-----------Jnotify test ---------");

Properties sysProps = System.getProperties();

String osArch = (String) sysProps.get("os.arch");

String osName = (String) sysProps.get("os.name");

String userDir = (String) sysProps.getProperty("user.dir");

LOG.debug("os.arch: " + osArch);

LOG.debug("os.name: " + osName);

LOG.debug("userDir: " + userDir);

LOG.debug("java.class.path: " + sysProps.get("java.class.path"));

// 直接調用Jnotify時, 會發生異常:java.lang.UnsatisfiedLinkError: no jnotify_64bit in java.library.path

// 這是由于Jnotify使用JNI技術來加載dll文件,如果在類路徑下沒有發現相應的文件,就會拋出此異常。

// 因此可以通過指定程序的啟動參數: java -Djava.library.path=/path/to/dll,

// 或者是通過修改JVM運行時的系統變量的方式來指定dll文件的路徑,如下:

// 判斷系統是32bit還是64bit,決定調用對應的dll文件

String jnotifyDir = NATIVE_LIBRARIES_64BIT;

if (!osArch.contains("64")) {

jnotifyDir = NATIVE_LIBRARIES_32BIT;

}

LOG.debug("jnotifyDir: " + jnotifyDir);

// 獲取目錄路徑

String pathToAdd = userDir + jnotifyDir ;

boolean isAdded = false;

final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");

usrPathsField.setAccessible(true);

final String[] paths = (String[]) usrPathsField.get(null);

LOG.debug("usr_paths: " + Arrays.toString(paths));

for (String path : paths) {

if (path.equals(pathToAdd)) {

isAdded = true;

break;

}

}

if (!isAdded) {

final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);

newPaths[newPaths.length - 1] = pathToAdd;

usrPathsField.set(null, newPaths);

}

LOG.debug("java.library.path: " + System.getProperty("java.library.path"));

LOG.debug("usr_paths: " + Arrays.toString((String[]) usrPathsField.get(null)));

usrPathsField.setAccessible(false);

LOG.debug("類路徑加載完成");

// 監聽F盤下的文件事件

JNotify.addWatch("F:\\", JNotify.FILE_ANY, true, new JNotifyListener() {

@Override

public void fileRenamed(int wd, String rootPath, String oldName, String newName) {

log.debug("wd = " + wd + ", rootPath = " + rootPath);

log.debug("oldName = " + oldName + ", newName = " + newName);

}

@Override

public void fileModified(int wd, String rootPath, String fileName) {

log.debug("fileModified");

}

@Override

public void fileDeleted(int wd, String rootPath, String fileName) {

log.debug("fileDeleted");

}

@Override

public void fileCreated(int wd, String rootPath, String fileName) {

log.debug("fileDeleted");

}

});

while (true) {

}

}

}

總結

以上是生活随笔為你收集整理的java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。