-
<!--监控文件夹 使用Commons-io的monitor下的相关类可以处理对文件进行监控-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
- 新建一个ZJPFileLIstener.java文件
-
package com.zjjzfy.upload.listener;
import com.zjjzfy.upload.service.UserService;
import com.zjjzfy.upload.util.Md5Util;
import com.zjjzfy.upload.util.ZipUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
@Slf4j //@Slf4j 类上使用该注解,可以直接使用log变量
@Component
public class ZJPFileListener implements FileAlterationListener {
private static ZJPFileListener zjpFileListener;
@Autowired
UserService userServiceImpl;
ZJPFileMonitor monitor = null;
/**
*通过@PostConstruct实现初始化bean之前进行的操作
*/
public void init() {
zjpFileListener = this;
}
/**
*
* @param fileAlterationObserver
*/
@Override
public void onStart(FileAlterationObserver fileAlterationObserver) {
//业务代码
}
/**
* 监控目录中创建一个目录时触发
* @param file
*/
@Override
public void onDirectoryCreate(File file) {
//业务代码
}
/**
* 监控目录中目录发生改变触发
* @param file
*/
@Override
public void onDirectoryChange(File file) {
//业务代码
}
/**
* 监控目录中目录发生删除触发
* @param file
*/
@Override
public void onDirectoryDelete(File file) {
//业务代码
}
/**
* 监控目录中创建文件时触发
* @param file
*/
@Override
public void onFileCreate(File file) {
//业务代码
}
/**
* 监控目录中改变文件时触发
* @param file
*/
@Override
public void onFileChange(File file) {
//业务代码
}
/**
* 监控目录中文件删除时触发
* @param file
*/
@Override
public void onFileDelete(File file) {
//业务代码
}
/**
*
* @param fileAlterationObserver
*/
@Override
public void onStop(FileAlterationObserver fileAlterationObserver) {
}
}
需要注意的是业务代码中当要使用到Service层实现业务代码时,
这样引入的不在Controller层是会出现无法注入的问题,使用的时候会出现空指针情况,所以添加下面的代码
后面使用的时候使用this.userServiceImpl 这样问题就解决了
- 新建一个ZFPFileMonitor.java文件
package com.zjjzfy.upload.listener;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;
public class ZJPFileMonitor {
FileAlterationMonitor monitor = null;
public ZJPFileMonitor(long interval) throws Exception {
monitor = new FileAlterationMonitor(interval);
}
//监控方法
public void monitor(String path, FileAlterationListener listener) {
FileAlterationObserver observer = new FileAlterationObserver(new File(path));
monitor.addObserver(observer);
observer.addListener(listener);
}
//监控停止
public void stop() throws Exception{
monitor.stop();
}
//监控开始
public void start() throws Exception {
monitor.start();
}
}
将代码发在springboot的默认启动类中,interver表示隔多久监控一次 D:\\Share 表示监控的指定目录
new ZJPFileListener 是我们新建的第一个java文件 使用m.start来开始监控。