`
xiang37
  • 浏览: 414156 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用JNA对文件进行监听之观察者模式

 
阅读更多

JNA为第三方的JNI的一个实现包。里面实现了很多windows与linux的工具类。

 

package com.xiva.demo.jna;

import java.io.File;

import com.sun.jna.platform.FileMonitor;
import com.sun.jna.platform.FileMonitor.FileEvent;
import com.sun.jna.platform.FileMonitor.FileListener;
import com.xiva.lucene.IvIndexUpdate;

public class IvFileListener implements FileListener
{
    private long lastTime = System.currentTimeMillis();
    
    public void fileChanged(FileEvent fileevent)
    {
        if (fileevent.getType() == FileMonitor.FILE_MODIFIED)
        {
            fileevent.getFile();
            System.out.println(Thread.currentThread().getId());
            File file = fileevent.getFile();
            System.out.println("FILE_MODIFIED:" + file.getName());
            long currentTime = System.currentTimeMillis();
            System.out.println(currentTime);
            if (currentTime - 10000L > lastTime)
            {
                try
                {
                    IvIndexUpdate.updateIndex();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            lastTime = currentTime;
        }
        
    }
    
}

 

 

package com.xiva.demo.jna;

import java.io.File;
import java.util.concurrent.TimeUnit;

import com.sun.jna.platform.FileMonitor;
import com.sun.jna.platform.win32.W32FileMonitor;

/**
 * 目录检视
 */
public class JNADemo
{
    public static void main(String[] args)
    {
        File dir = new File("E:\\data\\lucene");
        
        FileMonitor fileMon = W32FileMonitor.getInstance();
        IvFileListener fileListen = new IvFileListener();
        System.out.println(Thread.currentThread().getId());
        try
        {
            fileMon.addWatch(dir, 10, true);
            fileMon.addFileListener(fileListen);
            
            TimeUnit.SECONDS.sleep(1000);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

 

其中有一个小的缺陷,就是修改文件会同时响应两次。也许与win的事件响应机制有关,可能是修改文件内容与修改文件属性各响应一次。给出的一个这种方法就是加上条件判断:(currentTime - 10000L > lastTime) 。

分享到:
评论

相关推荐

    利用jna在java下调用c语言库文件

    在此编了一个利用jna在java平台下调用c语言动态链接库的例子,c++代码也已经提供,java代码已经调试通过。

    JNA C文件(codeblocks编写)

    JNA远程方法调用,该项目为远程被调用的C项目,可供其他项目调用,已生成dll文件

    java 使用JNA读取ddl文件

    java 使用JNA读取ddl文件,亲测有效!

    JNA库文件和文档

    jni的进一步封装, 方便java和c/c++间相互通信, 使用者不需要对java和c/c++都了解。

    jna-5.12.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna调用dll的例子,包含dll文件和详细说明

    利用jna完成对c生成的dll文件进行调用。例子中包含dll文件。和对dll文件方法的调用。有注释说明

    JNA开发的jna.jar以及.so库文件

    里面包含了JNA的4.2.1版本的jna.jar包以及所有CPU平台的.so库文件,具体介绍参见博客:http://blog.csdn.net/abc6368765/article/details/77671682

    jna java调用工程包括jna.jar文件

    现成的java调用jna项目,其中包括jna.jar文件。方便诸位参考。

    jna.rar_jna_jna.jar_jna文件

    这是一个jna.jar的文件,读者可能下载这个文件,满足自己调用java的需求

    JAVA利用JNA调用DLL

    JAVA 利用JNA调用C程序32位或者64位dll 实例,直接解压运行。

    java实现后台键盘监听所需依赖.zip

    1.java用jintellitype实现后台键盘监听时需要的JIntellitype.dll、JIntellitype64.dll、jintellitype-...2.java用jna实现后台键盘和鼠标监听时需要的jna.jar、platform.jar文件(这两个文件网上找了好久了,亲测有用)

    jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包

    jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包 JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna)。JNA提供一组Java工具类用于在运行期动态...

    jna-5.5.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna-4.3.0-API文档-中文版.zip

    赠送Maven依赖信息文件:jna-4.3.0.pom; 包含翻译后的API文档:jna-4.3.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:net.java.dev.jna:jna:4.3.0; 标签:java、jna、中文文档、jar包; 使用方法:解压翻译后...

    jna-5.4.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna-4.1.0-API文档-中文版.zip

    赠送Maven依赖信息文件:jna-4.1.0.pom; 包含翻译后的API文档:jna-4.1.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:net.java.dev.jna:jna:4.1.0; 标签:java、jna、中文文档、jar包; 使用方法:解压翻译后...

    jna-5.0.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna-4.0.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna-4.5.2.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

    jna-5.10.0.jar中文文档.zip

    解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请...

Global site tag (gtag.js) - Google Analytics