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

简单JAVA观察者模式监测文件是否改动

2013-08-28 22:09 288 查看
package amway.wangzhi.Observer;

import java.io.FileNotFoundException;
import java.util.Observable;
import java.util.Observer;

public class FileManage implements Observer {

@Override
public void update(Observable arg0, Object arg) {
Long date = null;
System.out.println("进了update方法11");
if (arg instanceof Long) {
date = (Long) arg;
System.out.println("有人修改了文件,修改时间为 " + date);
}
}

public static void main(String[] args) {
try {
FileObserver f = new FileObserver("D:\\file");
f.addObserver(new FileManage());
f.addObserver(new Manage());
while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
f.run();
}
} catch (FileNotFoundException e) {
System.out.println("路径地址不对,不是一个文件夹 !");
}
}

}

class Manage implements Observer {

@Override
public void update(Observable arg0, Object arg) {
String date = null;
System.out.println("进了update方法22");
if (arg instanceof String) {
date = (String) arg;
System.out.println("有人新增了文件,新增文件名: " + date);
}
}
}
package amway.wangzhi.Observer;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.Observable;

public class FileObserver extends Observable implements Runnable {

private File file = null;
private Map<String, Long> map = new HashMap<String, Long>();

public FileObserver(String path) throws FileNotFoundException {
this.file = new File(path);
if (!file.isDirectory()) {
throw new FileNotFoundException("路径不是一个文件夹");
}
getparms(file);
}

public void getparms(File dir) throws FileNotFoundException {
File[] files = dir.listFiles(); // 获取一个目录里面的所有文件
for (File file : files) {
if (file.isFile()) { // 判断是否为文件
this.map.put(file.getPath() + ":" + file.getName(),
file.lastModified());
}
}
for (File file : files) {
if (file.isDirectory()) {
getparms(file);// 递归调用,显示子目录里面的文件信息
}
}
}

// 递归检查文件夹下面的所有文件是否有变动
public void check(File dir) {
File[] files = dir.listFiles(); // 获取一个目录里面的所有文件
for (File file : files) {
if (file.isFile()) { // 判断是否为文件
if (this.map.get(file.getPath() + ":" + file.getName()) == null) {
add(file.getName());
this.map.put(file.getPath() + ":" + file.getName(),
file.lastModified());
} else if (file.lastModified() != this.map.get(file.getPath()
+ ":" + file.getName())) {
this.map.put(file.getPath() + ":" + file.getName(),
file.lastModified());
update(file.lastModified());
}
}
}
for (File file : files) {
if (file.isDirectory()) {
check(file);// 递归调用,显示子目录里面的文件信息
}
}
}

public void update(Long date) {
System.out.println("修改了文件");
setChanged();
notifyObservers(date);
}

public void add(String file) {
System.out.println("新增文件");
setChanged();
notifyObservers(file);
}

@Override
public void run() {
check(this.file);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: