2019.4.12

适配器模式,如果某个类需要实现多个方法,但是开发过程中只需要实现其中的一两个方法,直接使用该类的适配器类,复写需要实现的方法即可

观察者模式:有多个观察者observe观察一个主体,当主体发生变化时候,回调观察者绑定的监听器的方法

使用观察者模式,对某个文件夹进行监控

这里使用第三库,apache-common-io,里面有许多有关封装好的IO类,比如文件的复制,移动删除等等

1. 先创建一个FileAlterationObserver

FileAlterationObserver(String directoryName, FileFilter fileFilter, IOCase caseSensitivity)
//文件过滤器可以使用封装好的SuffixFileFilter(直接以扩展名就行筛选)
//IOCase是一个枚举类,里面有三个选项,当前的系统是否区分大小写,Windows系统文件管理是不区分文件的大小写的,而linux支持
//INSENSITIVE SENSITIVE SYSTEM
//不敏感(不区分大小写) 敏感的(支持) 按照当前系统,一般使用第三个
FileAlterationObserver txtObserver = new FileAlterationObserver("d:\\dir", new SuffixFileFilter(new String[]{".txt",".java",".html"}), IOCase.SYSTEM);

2. 给观察者Ovsever添加监听器

// 适配器模式(设计模式中的一种),其实就对原生接的方法做了默认的空实现
txtObserver.addListener(new FileAlterationListenerAdaptor(){
/**
* 文体出现的新文件时,将会执行此方法
* @param file
*/
@Override
public void onFileCreate(File file) {
System.out.println("FileMonitor.onFileCreate(): 新文件名:" + file.getName());
try {
// 目标文件
File destFile = new File("d:\\txt", file.getName());
// copy file to txt directory
FileUtils.copyFile(file, destFile);//FileUtils文件管理类,有移动文件,复制文件等方法
} catch (IOException e) {
e.printStackTrace();
}
}

3.为主体设置观察者

try {
//监控,每5s检测一次
FileAlterationMonitor monitor = new FileAlterationMonitor(5000, txtObserver, mp3Observer);
monitor.start();//FileAlterationMonitor实现了Runnble接口,相当于一个线程,使用start开启
} catch (Exception e) {
e.printStackTrace();
}

Java 学习笔记 观察者模式与适配者模式 监控文件夹的更多相关文章

  1. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  2. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  3. java学习日志---File实例:实现复制整个文件夹、解决listFiles()为null问题

    需求:将H盘下的所有文件复制到H:/All 文件夹中 思路:使用递归遍历整个目标目录 传入目标路径 判断是否是文件夹 是:调用listFiles()方法,得到File数组,重点内容接着执行1 否:复制 ...

  4. Java学习笔记——设计模式之二.策略模式

    明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...

  5. Java学习笔记——设计模式之九.建造者模式

     建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...

  6. Java学习笔记(7)---流(Stream),文件(File)

    1.Stream流 a.定义: Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集 ...

  7. Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容

    ① 读取文件夹大小 a. 封装计算文件夹大小的函数 b.  打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...

  8. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. thinkphp 找数据库某个字段为空的数据,PHP 数据调取 空数据

    $arr['dingwei'] = array('EXP','is null');

  2. Windows获取进程完整路径

    #include <stdio.h> #include <locale.h> #include <windows.h> #include <tlhelp32. ...

  3. Deployment Characteristics of "The Edge" in Mobile Edge Computing

    移动边缘计算中的“边缘”部署特性 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 本文翻译了论文的关键内容. 摘要 移 ...

  4. libguestfs手册(2):guestfish command

    添加一个drive:guestfs_add_drive_opts add-drive filename [readonly:true|false] [format:..] [iface:..] [na ...

  5. Vue 学习笔记 -- inline-template

    简书 更方便的使用私有子组件 定义一个私有子组件时,如果子组件的template过长会使得代码非常难以阅读 这时可以使用内联模版 但是如果写成这样 为毛用要子组件呢?

  6. 移动端web开发的注意点大总结

    对于手机网站建设,总结了如下几点注意: 1. 安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作 ...

  7. Java 延迟队列使用

    延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到…… 应用场景比较多,比如延时1分钟发短 ...

  8. 深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本

    对于Redis脚本使用过的同学都知道,这个主要是为了防止竞态条件而用的.因为脚本是顺序执行的.(不用担心效率问题)比如我在工作用,用来设置考试最高分. 如果还没有用过的话,先去看Redis脚本的介绍, ...

  9. Java两种方法实现循环报数

    问题描述: 十个猴子围成一圈选大王,依次1-3 循环报数,报到3 的猴子被淘汰,直到最后一只猴子成为大王.问,哪只猴子最后能成为大王? 方法一:Java链表 public class TestAll ...

  10. Eclipse极致性能调优

    直接复制以下到eclipse.ini里面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 -Xverify:n ...