Java 学习笔记 观察者模式与适配者模式 监控文件夹
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 学习笔记 观察者模式与适配者模式 监控文件夹的更多相关文章
- Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹
(15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...
- Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作
(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...
- java学习日志---File实例:实现复制整个文件夹、解决listFiles()为null问题
需求:将H盘下的所有文件复制到H:/All 文件夹中 思路:使用递归遍历整个目标目录 传入目标路径 判断是否是文件夹 是:调用listFiles()方法,得到File数组,重点内容接着执行1 否:复制 ...
- Java学习笔记——设计模式之二.策略模式
明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...
- Java学习笔记——设计模式之九.建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...
- Java学习笔记(7)---流(Stream),文件(File)
1.Stream流 a.定义: Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集 ...
- Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容
① 读取文件夹大小 a. 封装计算文件夹大小的函数 b. 打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- cadence元件放置方法
在导入网表之后,需要放置元件,介绍几种常见的放置元件的方法和常用的几种元件操作方法.
- html+css手机端自动适应
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- mysql数据库连接异常问题(总结)
mysql数据库连接异常问题(总结) 1.1 前言 最近项目由1个数据源增加至了3个数据源(连接池使用C3P0),结果各种奇葩的数据库连接问题接踵而至,为防止将来再次遇到同样的问题不犯同样错误,现 ...
- 记一次通过c#运用GraphQL调用Github api
阅读目录 GraphQL是什么 .net下如何运用GraphQL 运用GraphQL调用Github api 结语 一.Graphql是什么 最近在折腾使用Github api做个微信小程序练练手,本 ...
- Python的变量声明
Python 与大多数其它语言一样有局部变量和全局变量之分,但是它没有明显的变量声明.变量通过首次赋值产生,当超出作用范围时自动消亡. Example 1. 定义 myParams 变量 if __n ...
- [Swift]LeetCode64. 最小路径和 | Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- [Swift]LeetCode165. 比较版本号 | Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 &l ...
- [Swift]LeetCode318. 最大单词长度乘积 | Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- Redis 设计与实现 (九)--Lua
EVAL script numkeys key [key ...] arg [arg ...] script: 你的lua脚本 numkeys: key的个数 key: ...
- python网络-多进程(21)
一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...