您的位置:首页 > 编程语言 > Java开发

java监控指定路径下文件及文件夹变化

2017-12-23 21:32 405 查看
之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包。主要有下面几点不同:1. WatchService是采用扫描式的,效率低,commons-io是使用事件驱动的,效率高;2. WatchService代码写起来费劲 3. WatchService不能监听到孙文件目录(多级目录),事先父文件夹需要存在,而FileAlterationObserver可以监听多级目录,父目录事先不存在也没问题。http://commons.apache.org/proper/commons-io/,

commons-io功能介绍:
1) 工具类
FilenameUtils
2)
FileMonitor工具类包,监听该文件及文件夹变化
3)filters过滤器
org.apache.commons.io.filefilter
4) Comparators
org.apache.commons.io.comparator包下的工具类,可以方便进行文件的比较
5)
input/output包 common io的org.apache.commons.io.input
/ org.apache.commons.io.output 包,其中好特别的是TeeOutputStream能将一个输入流分别输出到两个输出流

commons-io-2.3.jar 中,有实现文件监控的类,在org.apache.commons.io.monitor包下,

主要包括 observer ,listener,monitor 含义你懂得滴,典型观察者模式,直接上代码:

listener:

/*
* Version 1.0.0
* Created on 2017年12月23日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.file;

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**
* <B>创  建 人:</B>AdministratorReyoAut <BR>
* <B>创建时间:</B>2017年12月23日 下午9:25:21<BR>
*
* @author ReYo
* @version 1.0
*/
public class ReYoFileListener implements FileAlterationListener {

ReYoFileMonitor monitor = null;

@Override
public void onStart(FileAlterationObserver observer) {
//System.out.println("onStart");
}

@Override
public void onDirectoryCreate(File directory) {
System.out.println("onDirectoryCreate:" + directory.getName());
}

@Override
public void onDirectoryChange(File directory) {
System.out.println("onDirectoryChange:" + directory.getName());
}

@Override
public void onDirectoryDelete(File directory) {
System.out.println("onDirectoryDelete:" + directory.getName());
}

@Override
public void onFileCreate(File file) {
System.out.println("onFileCreate:" + file.getName());
}

@Override
public void onFileChange(File file) {
System.out.println("onFileCreate : " + file.getName());
}

@Override
public void onFileDelete(File file) {
System.out.println("onFileDelete :" + file.getName());
}

@Override
public void onStop(FileAlterationObserver observer) {
//System.out.println("onStop");
}

}


monitor

/*
* Version 1.0.0
* Created on 2017年12月23日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.file;

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**
* <B>创  建 人:</B>AdministratorReyoAut <BR>
* <B>创建时间:</B>2017年12月23日 下午9:26:08<BR>
*
* @author ReYo
* @version 1.0
*/
public class ReYoFileMonitor {

FileAlterationMonitor monitor = null;

public ReYoFileMonitor(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();
}

public static void main(String[] args) throws Exception {
ReYoFileMonitor m = new ReYoFileMonitor(5000);
m.monitor("D:\\temp", new ReYoFileListener());
m.start();
}
}


启动后,每5秒扫描指定路径下文件的变化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: