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. 设置mysql InnoDB存储引擎下取消自动提交事务

    mysql 存储引擎中最长用的有两种,MyISAM 存储引擎和InnoDB存储引擎. 1.MyISAM 存储引擎 不支持事务,不支持外键,优势是访问速度快: 2.InnoDB存储引擎 支持事务,一般项 ...

  2. 使用 python 实现π的计算

    1.π的神奇 π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它是无限的.这就意味着任何对π的计算都仅仅是 ...

  3. spring的配置和使用

    spring的配置和使用 1. 创建基于java的配置. 配置极少量的XML来启用java配置:   <?xml version="1.0" encoding="U ...

  4. 一种简单的 rem 单位基准设置

    1rem 换算成的像素值等于 html 元素的 font-size 值 如果 设置 html 的 font-size 为 100px, 那么设计稿的 像素转换成 rem 只需要除以 100 即可. f ...

  5. 用Java实现给图片添加文字

    package image; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java. ...

  6. 微信小程序 + mock.js 实现后台模拟及调试

    一.创建小程序项目 mock.js 从 https://github.com/nuysoft/Mock/blob/refactoring/dist/mock.js 下载 api.js:配置模拟数据和后 ...

  7. 字符串匹配(二)----KMP算法

    什么是KMP算法: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法).KMP ...

  8. PCD文件格式详解及在PCL下读取PCD文件

    一.PCD简介 1.1 PCD版本 在点云库PCL 1.0发布之前,PCD文件格式就已经发展更新了许多版本.这些新旧不同的版本用PCD_Vx来编号(例如PCD_V5.PCD_V6和PCD_V7等),分 ...

  9. [Swift]LeetCode65. 有效数字 | Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  10. [Swift]LeetCode67. 二进制求和 | Add Binary

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...