Apache Commons JCI最佳实践(五)监听文件(夹)的变更

Apache Commons JCI
placeholder image
admin 发布于:2019-06-08 16:09:36
阅读:loading

章接前文,终于又可以接到第一篇文章所说的实现对于文件(夹)的变更监控功能了,这也表示本次的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();
    }

}

示例效果

运行效果.gif

示例代码下载

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


 点赞


 发表评论

当前回复:作者

 评论列表


留言区