需要用到监测文件系统中文件夹、文件的增删改操作。Jnotify开发包是个不错的文件钩子库,使用方式如下:
import net.contentobjects.jnotify.*;
/**
*
* @author Chen Yi <njchenyi@gmail.com>
*/
public class FieMonitor {
/**
* @param args
*/
public static void main(String[] args) {
String monitedPath = "D:/test";
int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;
// 是否监视子目录
boolean watchSubtree = true;
try {
int watchID = JNotify.addWatch(monitedPath, mask, watchSubtree, new Listener());
Thread.sleep(1000000);
boolean res = JNotify.removeWatch(watchID);
if (!res) {
// invalid
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static class Listener implements JNotifyListener {
public void fileRenamed(int wd, String rootPath, String oldName, String newName) {
print("renamed " + rootPath + " : " + oldName + " -> " + newName);
}
public void fileModified(int wd, String rootPath, String name) {
print("modified " + rootPath + " : " + name);
}
public void fileDeleted(int wd, String rootPath, String name) {
print("deleted " + rootPath + " : " + name);
}
public void fileCreated(int wd, String rootPath, String name) {
print("created " + rootPath + " : " + name);
}
void print(String msg) {
System.err.println(msg);
}
}
}
在32位windows系统,一定要把jnotify.dll放到jdk安装目录中的jre/bin文件夹。
文件夹操作也被认为是一种文件操作。