通过java后台实现监控特定路径下的文件夹、文件内容是否发生变动!
实时监控文件变化有很多种方式,本文主要讲的是通过commons.io.jar,感觉很好用,很容易!
上面直接上案例:
第一步:maven引入:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
第二步:开启监控
package cn.**.**.**.plugs.file;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;
/**
* @author <a href="mailto:Tastill@**.cn">Tastill</a>
* @version 2019/1/24 15:00
* @description FileMonitorTest
*/
@Component
public class FileMonitor {
/**
* @description
* @param
* @return
* @version 2.0, 2019/1/25 9:44
* @author <a href="mailto:Tastill@**.cn">Tastill</a>
*/
@PostConstruct
public void initFileMonitor() {
// 监控目录
String rootDir = "D:\\Test";
// 轮询间隔 5 秒
Integer time = 10;
long interval = TimeUnit.SECONDS.toMillis(time);
// 创建一个文件观察器用于处理文件的格式,
// FileFilterUtils.suffixFileFilter(".txt")
FileAlterationObserver _observer = new FileAlterationObserver(
rootDir,
FileFilterUtils.and(
FileFilterUtils.fileFileFilter()), //过滤文件格式
null);
FileAlterationObserver observer = new FileAlterationObserver(rootDir);
observer.addListener(new FileListener()); //设置文件变化监听器
//创建文件变化监听器
FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
// 开始监控
try {
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里使用@PostConstruct注解,主要是为了项目启动时,执行一次该方法,省去了通过定时器来调起定时器!
第三步:继承FileAlterationListenerAdaptor.java类,重写文件变更时的实现业务逻辑处理
package cn.**.**.**.plugs.file;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.File;
import java.util.Properties;
import org.apache.log4j.Logger;
/**
* @author <a href="Tastill@**.cn">Tastill</a>
* @version 2019/1/24 14:55
* @description FileListener
*/
public class FileListener extends FileAlterationListenerAdaptor {
public static final Logger logger = Logger.getLogger(FileListener.class);
@Autowired
FileConfigLoader fileConfigLoader;
/**
* @description 启动监听
* @param
* @return
* @version 2.0, 2019/1/24 15:08
* @author <a href="Tastill@**.cn">Tastill</a>
*/
@Override
public void onStart(FileAlterationObserver observer) {
// System.out.println("启动监听器:");
}
@Override
public void onDirectoryCreate(File directory) {
logger.info("有新文件夹生成:"+directory.getName());
}
@Override
public void onDirectoryChange(File directory) {
logger.info("有文件夹内容发生变化:"+directory.getName());
}
@Override
public void onDirectoryDelete(File directory) {
logger.info("有文件夹被删除:"+directory.getName());
}
/**
* @description 文件创建
* @param
* @return
* @version 2.0, 2019/1/24 14:59
* @author <a href="Tastill@**.cn">Tastill</a>
*/
@Override
public void onFileCreate(File file){
logger.info("有新文件生成:"+file.getName());
}
/**
* @description 文件内容发生变化
* @param
* @return
* @version 2.0, 2019/1/24 15:05
* @author <a href="Tastill@**.cn">Tastill</a>
*/
@Override
public void onFileChange(File file){
logger.info("有文件被修改:"+file.getName());
}
/**
* @description 文件被删除
* @param
* @return
* @version 2.0, 2019/1/24 16:13
* @author <a href="Tastill@**.cn">Tastill</a>
*/
@Override
public void onFileDelete(File file){
logger.info("有文件被删除:"+file.getName());
}
/**
* @description 监听停止
* @param
* @return
* @version 2.0, 2019/1/24 15:07
* @author <a href="Tastill@**.cn">Tastill</a>
*/
@Override
public void onStop(FileAlterationObserver observer){
// System.out.println("监听停止");
}
}