common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法《很全的监听文件例子》)

文件监听中有java自带的fileOberver和fileOberverable这两个通过观察者模式进行监听,例如:在主程序中ResolveFileObserver fileObserver = new ResolveFileObserver(PATH);

fileObserver.startWatching();其中ResolveFileObserver 是实现FileObserver类复写startWatching方法,其中startWatching通过堆栈进行实现例如:

@Override
	public void startWatching()
	{
		if (mObservers != null)
			return;

		mObservers = new ArrayList<SingleFileObserver>();
		Stack<String> stack = new Stack<String>();
		stack.push(mPath);

		while (!stack.isEmpty())
		{
			String parent = stack.pop();
			mObservers.add(new SingleFileObserver(parent, mMask));
			File path = new File(parent);
			File[] files = path.listFiles();
			if (null == files)
				continue;
			for (File f : files)
			{
				if (f.isDirectory() && !f.getName().equals(".") && !f.getName().equals(".."))
				{
					stack.push(f.getPath());
				}
			}
		}

		for (SingleFileObserver sfo : mObservers)
		{
			sfo.startWatching();
		}
	}

	@Override
	public void stopWatching()
	{
		if (mObservers == null)
			return;

		for (SingleFileObserver sfo : mObservers)
		{
			sfo.stopWatching();
		}
		mObservers.clear();
		mObservers = null;
	}

再复写@Override
public void onEvent(int event, String path)这个方法,通过event参数进行判断。满足条件进行处理例如:

@Override
	public void onEvent(int event, String path)
	{
		
		String fileName = path.substring(path.lastIndexOf("/") + 1);
		switch (event)
		{
		case FileObserver.CLOSE_WRITE:
			if ("条件判断是否成立")

				//处理相应的逻辑

			break;
		}
	}

上面的为什么用栈进行监听调用?因为文件监听只能监听其当前目录,子目录是监听不到的,比如/data1/data2.如果你在data1中监听了文件,data2如果变化了是观察不到的,具体的看看代码的实现就明白了。。。

整个监听例子见我其他博客的完整例子。接下来是实现另一个文件监听功能,是common-io-2.0的新功能之文件监控FileAlteration。

在common-io-2.0的新功能初看了下加入了文件监控功能,可能有的时候会遇到。

这部分内容主要有3大类,一个是Monitor类,字面意思就是监控类咯;一个是Observer类,字面意思嘛观察类,用来观察文件的类;一个是listener类,提供各种监听时候的事件处理。

 

就简单点吧,先看了下这几个类的构造函数,非常简单。那我就继承一下好了:

 

Java代码   收藏代码
  1. package com.zhubin.FileListener;  
  2.   
  3. import java.io.File;  
  4.   
  5. import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;  
  6. import org.apache.commons.io.monitor.FileAlterationObserver;  
  7.   
  8. public class FileListenerAdaptor extends FileAlterationListenerAdaptor{  
  9.       
  10.     @Override  
  11.     public void onStart(FileAlterationObserver arg0) {  
  12.         System.out.println("begin listening!");  
  13.         super.onStart(arg0);  
  14.     }  
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值