一. spring配置文件:
application.xml
二. spring上下文加载监听器:
SpringContextLoaderListener.class
import javax.servlet.ServletContextEvent;
import org.springframework.web.context.ContextLoaderListener;
public class SpringContextLoaderListener extends ContextLoaderListener{
@Override
public void contextInitialized(ServletContextEvent event) {
super.contextInitialized(event);
FileMonitor scanner = getScanner();
// 启动目录扫描器
scanner.start();
}
@Override
public void contextDestroyed(ServletContextEvent event) {
FileMonitor scanner = getScanner();
// 关闭目录扫描器
scanner.stop();
super.contextDestroyed(event);
}
private FileMonitor getScanner() {
return getCurrentWebApplicationContext().getBean(FileMonitor.class);
}
}
三. web工程配置文件:
web.xml
contextConfigLocation classpath:application.xml com.web.SpringContextLoaderListener
四. 文件监测器
1. 接口:FileMonitor.class
import org.apache.commons.io.monitor.FileAlterationObserver;
public interface FileMonitor {
void addObserver(FileAlterationObserver observer);
void removeObserver(FileAlterationObserver observer);
Iterable getObservers();
void start();
void stop();
long getInterval();
}
2. 实现类:FileMonitorImpl.class
import java.util.concurrent.ThreadFactory;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
public class FileMonitorImpl implements FileMonitor{
private final FileAlterationMonitor monitor;
private static final String MONITOR_THREAD_NAME = "File MonITOR Daemon";
private static final boolean DAEMON = false;
FileMonitorImpl(int interval, final FileAlterationObserver observer) {
this(interval, observer,
new BasicThreadFactory.Builder().
namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build());
}
FileMonitorImpl(int interval, final FileAlterationObserver observer,
final ThreadFactory factory) {
this.monitor = new FileAlterationMonitor(interval, new FileAlterationObserver[] { observer });
monitor.setThreadFactory(factory);
}
@Override
public void addObserver(FileAlterationObserver observer) {
monitor.addObserver(observer);
}
@Override
public void removeObserver(FileAlterationObserver observer) {
monitor.removeObserver(observer);
}
@Override
public Iterable getObservers() {
return monitor.getObservers();
}
@Override
public void start() {
try {
monitor.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void stop() {
try {
monitor.stop();
}
catch (Exception e) {
e.printStackTrace();
}
}
@Override
public long getInterval() {
return monitor.getInterval();
}
}
五. 文件观察器
1. 接口:FileObserver.class
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListener;
public interface FileObserver {
void addListener(final FileAlterationListener listener);
void removeListener(final FileAlterationListener listener);
Iterable getListeners();
void initialize() throws Exception;
void destroy() throws Exception;
File getDirectory();
public FileFilter getFilter();
}
2. 实现类:FileObserverImpl.class
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class FileObserverImpl extends FileAlterationObserver implements FileObserver{
private static final long serialVersionUID = -7239227289538993830L;
private final FileFilter filter;
public FileObserverImpl(String dir, final FileFilter filter,
FileAlterationListener listener) {
super(dir, filter, (IOCase) null);
addListener(listener);
this.filter = filter;
File directory = new File(dir);
// 如果目录不存在
if(!directory.exists()) {
try {
FileUtils.forceMkdir(directory);
}
catch (IOException e) {
e.printStackTrace();
}
}
// 如果存在的是文件
else if(directory.exists() && directory.isFile()) {
try {
FileUtils.forceDelete(directory);
FileUtils.forceMkdir(directory);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void addListener(final FileAlterationListener listener) {
super.addListener(listener);
}
@Override
public void removeListener(final FileAlterationListener listener) {
super.removeListener(listener);
}
@Override
public Iterable getListeners() {
return super.getListeners();
}
@Override
public void initialize() throws Exception {
super.initialize();
}
@Override
public void destroy() throws Exception {
super.destroy();
}
@Override
public File getDirectory() {
return super.getDirectory();
}
public FileFilter getFilter() {
return filter;
}
}
六. 文件监听器:
FileListener.class
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public final class FileListener extends FileAlterationListenerAdaptor {
@Override
public void onFileCreate(File file) {
// To do something
}
@Override
public void onFileDelete(File file) {
// To do something
}
@Override
public void onFileChange(File file) {
// To do something
}
@Override
public void onStart(FileAlterationObserver observer) {
// To do something
}
@Override
public void onStop(FileAlterationObserver observer) {
// To do something
}
}
七. 文件过滤器
1. 接口:FileFilter.class
public interface FileFilter extends java.io.FileFilter {
String[] getExtensions();
}
2. 实现类:
FileFilterImpl.class
import java.io.File;
import org.apache.commons.io.FilenameUtils;
public class FileFilterImpl implements FileFilter{
private String[] extensions;
public FileFilterImpl(String... extensions) {
this.extensions = extensions;
}
@Override
public boolean accept(File pathname) {
return FilenameUtils.isExtension(pathname.getName(), extensions);
}
@Override
public String[] getExtensions() {
return extensions;
}
}
以上所述是小编给大家介绍的Java实现文件变化监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!



