java中Jnotify文件监视库的使用

jnotify-0.94 下载地址:http://download.csdn.net/detail/zxnlmj/7499157

本人测试环境为win7环境,使用Myeclipse

1、建一个java或者javaweb项目。。。

2、将jnotify-lib-0.94压缩包解压缩,添加其中的jnotify-0.94.jar到项目中(java项目需要手动build to path,javaweb不需要)。

3、建立测试类JnotifyTest.java如下,使用junit进行测试:

package test;

import net.contentobjects.jnotify.JNotify;
import net.contentobjects.jnotify.JNotifyException;
import net.contentobjects.jnotify.JNotifyListener;

import org.junit.Test;

public class JnotifyTest {
    /** 被监视的目录 */
    String path = "F:\\SHDownload\\PIC";
    /** 监视目录的事件 */
    int mask =  JNotify.FILE_CREATED |
                JNotify.FILE_DELETED |
                JNotify.FILE_MODIFIED|
                JNotify.FILE_RENAMED;
    /** 是否监视子目录,即级联监视 */
    boolean watchSubtree = true;
    
    /** 监听程序Id */
    public int watchID;
    
    @Test
    public void beginWatch() {
        try {
            this.watchID = JNotify.addWatch(path, mask, watchSubtree, new JNotifyListener()
            {
                public void fileRenamed(int wd, String rootPath, String oldName, String newName)
                {
                    System.out.println("JNotifyTest.fileRenamed() : wd #" + wd + " root = " + rootPath + ", " + oldName + " -> " + newName);
                }
                
                public void fileModified(int wd, String rootPath, String name)
                {
                    System.out.println("JNotifyTest.fileModified() : wd #" + wd + " root = " + rootPath + ", " + name);
                }
                
                public void fileDeleted(int wd, String rootPath, String name)
                {
                    System.out.println("JNotifyTest.fileDeleted() : wd #" + wd + " root = " + rootPath
                            + ", " + name);
                }
                
                public void fileCreated(int wd, String rootPath, String name)
                {
                    System.out.println("JNotifyTest.fileCreated() : wd #" + wd + " root = " + rootPath
                            + ", " + name);
                }
            });
        } catch (JNotifyException e) {
            e.printStackTrace();
        }
        // 死循环,线程一直执行,休眠一分钟后继续执行,主要是为了让主线程一直执行
        // 休眠时间和监测文件发生的效率无关(就是说不是监视目录文件改变一分钟后才监测到,监测几乎是实时的,调用本地系统库)
        while(true){
            try {
                Thread.sleep(60000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    @Test
    public void removeWatch(){
        boolean res = false;
        try {
            res = JNotify.removeWatch(watchID);
        } catch (JNotifyException e) {
            e.printStackTrace();
        }
        if (!res)
        {
            // invalid watch ID specified.
        }
    }
}

选中beginWatch方法,右键,run as -》junit test,报错如下:

java.lang.UnsatisfiedLinkError: no jnotify in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at net.contentobjects.jnotify.win32.JNotify_win32.<clinit>(Unknown Source)
    at net.contentobjects.jnotify.win32.JNotifyAdapterWin32.<init>(Unknown Source) 
Error loading library,
java.library.path=C:\Program Files (x86)\Java\jdk1.6.0_30\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;
C:\Windows;C:/Program Files (x86)/MyEclipse8.6/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client;
C:/Program Files (x86)/MyEclipse8.6/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin;C:\oracle\product\10.2.0\db_1\bin;
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Java\jdk1.6.0_30\bin;D:\ProBag\apache-cxf-2.7.7\bin;.

这是因为没有将jnotify运行时需要加载响应的类库(上面下载的压缩包中,类库的名称不能随意改变):

电脑处理器为i386(intel32位处理器)架构:jnotify.dll

电脑处理器为amd64架构:jnotify_64bit.dll

这就需要将类库放到System.err.println(System.getProperty("java.library.path"));该代码执行所输出的java类库路径的任意一个目录下,我是放到C:\Program Files (x86)\Java\jdk1.6.0_30\bin该目录下。

4、再次运行,成功;往监视目录中拷贝文件,输出结果如下:

java中Jnotify文件监视库的使用

时间: 2024-10-26 11:13:04

java中Jnotify文件监视库的使用的相关文章

Java中读取文件

Java中读取文件,去除一些分隔符,保存在多维数组里面 1 public void readFile(String filePath) 2 { 3 File file=new File(filePath); 4 ArrayList<String[]> dataArray=new ArrayList<String[]>(); 5 try{ 6 String str=new String(); 7 BufferedReader in=new BufferedReader(new Fil

Java中的文件操作

在使用计算机编程中,常常会用到对于文件的操作,以下是我对于Java中文件的相关内容学习之后的一个总结和在学习过程中遇到的一些问题. 一.什么是文件 对于文件进行操作,首先我们要知道什么是文件.在此之前,我们要知道,计算机其实就是一个文件系统.在计算机中,我们能在硬盘中看到的所有东西都叫文件.由此看来,计算机中文件是一个很广的范围.事实上,计算机中文件被分为了3种,一个是标准文件,一个是目录文件,还有一个就是虚拟内存文件. 这三种对于文件的分类没有一个明确的定义,后缀名是(.txt..doc..m

背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

[源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取 Package 中的文件 可移动存储中的文件操作 “库”管理 示例1.演示如何获取 Package 中的文件FileSystem/PackageData/Demo.xaml <Page x:Class="Windows10.FileSystem.PackageData.D

Java中移动文件或目录的方法盘点

本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:Java中移动文件或目录的方法盘点: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; public class M

Java 中的纤程库 – Quasar

来源:鸟窝, colobu.com/2016/07/14/Java-Fiber-Quasar/ 如有好文章投稿,请点击 → 这里了解详情 最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题: 服务 A 是我们开发的系统,它的业务需要调用 B.C.D 等多个服务,这些服务是通过http的访问提供的. 问题是 B.C.D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长.幸运地是这些服务都是集群部署的,容错率和并发支持都比较

Android(java)学习笔记167:Java中操作文件的类介绍

1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creates a new File instance by converting the given pathname string into an abstract pathname. 2)File(File parent, String child)       Creates a new File i

Java中实现文件上传下载的三种解决方案

第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream();// 把文件读入 String filePath = request.getRealPath(fileAddre);//取系统当前路径

Java中的文件和stream流的操作代码

1.Java中FileRead方法的运用代码及详解 package example2;import java.io.FileReader;import java.io.IOException;class FileRead{    public static void main(String[] args) throws IOException{        //创建一个FileWriter对象    //FileWriter fw=new FileWriter("File01.txt"

Java中的文件上传和下载

文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文件,这是由jsp运行机制所决定的.jsp中通过将表单元素设置Method="post" enctype="multipart/form-data" 属性,让表单以二进制编码的方式提交,在接收次请求的Servelet中用二进制流来获取内容,从而实现文件的上传. 表单的en