简单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); } }
相关文章推荐
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件,动态增加观察者
- Java设计模式之观察者模式简单介绍
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
- 设计模式之观察者模式(有源码简单实现及java函数简单实现)
- Java 观察者模式 简单例子
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
- Java 简单观察者模式Demo
- java观察者模式的简单案例
- JAVA设计模式-观察者模式简单例子
- Java设计模式之观察者模式的应用--简单的事件通知工具
- 在Java中简单的使用观察者模式
- 最简单的观察者模式纯JAVA实现
- 一个“.java”文件中是否可以包含多个类(不是内部类)?有什么限制?
- 使用观察者模式实现Java应用程序设计MVC模式
- java设计模式之观察者模式
- 浅谈设计模式(java)——从lol来看观察者模式
- java设计模式之观察者模式
- JAVA设计模式——观察者模式