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

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);
        }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值