登录 
欢迎来到陈冬冬(雪地里走)的学习天地 | 经验分享整理平台 | 陈冬冬
 服务器本次启动于:26天前 

commons jci最佳实践(五)监听文件(夹)的变更

2019-06-08 16:09:36 阅读:()

章接前文,终于又可以接到第一篇文章所说的实现对于文件(夹)的变更监控功能了,这也表示本次的Apache commons项目中的JCI研究就到此准备结束了,掌握到这种较浅的程度去作为技术知识储备也到位了。

说正题,要实现对于一个文件夹的变更(增、删、改)监控,我们使用JCI可以非常简单的实现,前面的几篇文章也是去熟悉它的一个附带,所以这个功能是为了实现代码动态编译后的热部署而来的。

Test代码

package cn.chendd.example;

import junit.framework.TestCase;
import org.apache.commons.jci.ReloadingClassLoader;
import org.apache.commons.jci.listeners.ReloadingListener;
import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;

import java.io.File;

/**
 * @author chendd
 * @date 2019/6/8 16:16
 *
监听文件(夹)变更事件
 
*/
public class ListenerDirectory extends TestCase {

   
public void testListenerDirectory() throws Exception {

        ReloadingClassLoader classloader =
new ReloadingClassLoader(this.getClass().getClassLoader());
        ReloadingListener listener =
new ReloadingListener() {

           
//-----------------------------文件夹监控---------------------------
           
@Override
           
public void onDirectoryCreate(File pDir) {
                System.
out.println("文件夹创建 :" + pDir.getAbsolutePath());
            }

           
@Override
            
public void onDirectoryChange(File pDir) {
                System.
out.println("文件夹修改 :" + pDir.getAbsolutePath());
            }

           
@Override
           
public void onDirectoryDelete(File pDir) {
                System.
out.println("文件夹删除 :" + pDir.getAbsolutePath());
            }
           
//-----------------------------文件监控-----------------------------
           
@Override
           
public void onFileCreate(File pFile) {
                System.
err.println("文件创建:" + pFile.getAbsolutePath());
            }

           
@Override
           
public void onFileChange(File pFile) {
                System.
err.println("文件修改:" + pFile.getAbsolutePath());
            }

           
@Override
           
public void onFileDelete(File pFile) {
                System.
err.println("文件删除:" + pFile.getAbsolutePath());
            }

        };
        listener.addReloadNotificationListener(classloader);
        File directory =
new File("D:\\logs");
        FilesystemAlterationMonitor fam =
new FilesystemAlterationMonitor();
        fam.addListener(directory, listener);
        fam.setInterval(
1000);//轮询检查事件
       
fam.start();

       
//没有别的用途,只是让程序不退出
       
int index = 1;
       
while(index < 50) {
            Thread.sleep(
1000 * 2);
            index++;
        }
        fam.stop();
    }

}

示例效果

jdfw.gif

示例代码下载

https://gitee.com/88911006/chendd-examples




你可能感兴趣的:
      关键字:file(9)public(8)void(7)getabsolutepath(6)jci(6)
      互动()
      评论()
      比起点赞,站长更喜欢登录后的评论
      • 0
      • 0
      • 0
      • 0
      • 0