Jnotify 监听文件夹及文件变化

JNotify,一个支持动态监控文件和文件夹(支持级联监控)的架包。在linux系统中,调用的是linux底层的inotify服务,只是添加了对子文件夹级联监控的功能。在windows中,需要添加附件的dll文件,因为windows默认没有该服务。 

使用很简单: 
1,将jnotify包引入到工程中。 
2,将jnotify依赖的so文件加入到java.library.path路径中。这个变量可能会有多个位置,随便将jnotify压缩包中附带的libjnotify.so文件加入到其中的任何一个路径中即可。如果不知道这个变量的值,可以使用System.getProperty("java.library.path")查看。当然,如果不想这么麻烦,可以在启动程序时指定JVM的参数

 

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

/**
 * 测试Jnotify监听文件目录变化
 * @author yongbo.chen
 *
 */
public class TestJnotify {

	public static void main(String[] args) throws JNotifyException, InterruptedException {
		
		// 调用监听方法
		new TestJnotify().simple();
	}

	public void simple() throws JNotifyException, InterruptedException {
		// 监听的目录
		String path = System.getProperty("user.home");
		
		int mask = JNotify.FILE_CREATED | JNotify.FILE_MODIFIED | JNotify.FILE_DELETED | JNotify.FILE_RENAMED;
		
		// 是否监听子目录
		boolean watchSubtree = true;
		
		int watchId = JNotify.addWatch(path, mask, watchSubtree, new JNotifyListener() {
			
			@Override
			public void fileRenamed(int wd, String rootPath, String oldName, String newName) {
				System.out.println("重命名文件:" + rootPath + "/" + newName);
			}
			
			@Override
			public void fileModified(int wd, String rootPath, String name) {
				System.out.println("修改文件:" + rootPath + "/" + name);
			}
			
			@Override
			public void fileDeleted(int wd, String rootPath, String name) {
				System.out.println("删除文件:" + rootPath + "/" + name);
			}
			
			@Override
			public void fileCreated(int wd, String rootPath, String name) {
				System.out.println("创建文件:" + rootPath + "/" + name);
			}
		});
		
		// 移除监听
		Thread.sleep(10000);
		
		JNotify.removeWatch(watchId);
		
	}
}

 

JDK7 里面的 NIO 的WatchService,这个也可以实现监听。只要文件

发生变化,就会产生相应的事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值