-
需要的依赖
-
<!--监控文件夹 使用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来开始监控。