JDBC
- JDBC驱动
接口:是一种能力,是一种标准,是
Everything 文件搜索
简介
背景
意义
- 解决Windows命令行下文件搜索问题
- 基于Java开发的工具可以在Windows和Linux平台无差异使用
实现流程
- 交互式
- 文件遍历,并存入到数据库
- 文件检索
技术
java(文件操作)
Database(插入式H2数据库或者MySQL数据库)
关于H2优势:
- 非常快,开源,JDBC API
- 内存数据库,支持嵌入式和服务器模式
- 基于浏览器的Console应用
- 占地面积小:大小约1.5MB的jar文件大小
JDBC
Lombok(IDEA安装Lombok插件)
java多线程
文件系统监控(Apache Commons IO)
目标:搭建项目
创建Maven项目
配置pom
创建包(按照功能分类)
cmd:Everything应用程序的命令行交互程序
config:Everything应用程序的配置相关类
core:Everything应用程序的具体业务实现
common
将file对象转化为thing对象
dao
数据源的获取与连接,以及业务的CRUD(增删改查)
index
索引加拦截,文件路径遍历
interceptor
拦截器的具体实现
model
基本的模型类抽象
search
检索的实现,实现统一调度器
创建入口程序
简单的公共代码开发
git管理
- Github创建仓库
- 本地仓库中git init
- 本地项目中创建 .gitignore添加不加入版本管理的目录和文件
- git add . -> git commit -m message
- git remote add origin http://xxx
- git push origin master
代码更新之后,只需要4,6
ctrl+shift+alt+l
README.md
基本的模型类抽象
- 文件类型(png jpeg doc exe msi jar zip rar ppt txt sh)
- 索引File的属性之后的信息 Thing
- 检索的参数(条件) Condition
设计数据库的表
- 创建数据库(my_everything)
- 设计数据库的表(Thing类创建的对象的属性)
数据库编程:(DAO)数据访问对象
- 创建数据源(DataSource)
- 执行数据库脚本(初始化数据库)
- Druid数据源,为监控而生的数据库连接池
检索:
数据库的初始化工作
数据库的访问工作(使用DataSource)
实现检索业务(查询)
final的初始化:直接赋值,构造方初始化法,构造块三种方法
索引
数据库的初始化工作
数据库的访问工作(使用DataSource)
实现检索业务(插入)
预编译命令设置参数
①如何遍历文件系统中所有文件,②需要对一些特点的文件或目录进行排除,③并且将文件对象转化为Thing对象,调用数据库访问的插入操作
索引
通过配置类来处理那些文件需要扫描,那些不需要扫描
C:\(路径) ->[做排除工作] File(Collection) -> Thing(Collection) -> FileIndexDao
shift f6 修改文件名称
1.检索 2.索引的遍历 3.重构
统一调度器(创建线程,分发任务)
- 构建索引(依赖index功能,业务FileScan)
- 检索数据(依赖search功能,业务FileSearch)
- 扩展
命令行客户端
- 欢迎
- 帮助
- 退出
- 索引
- 检索
发现问题
代码问题(资源未关闭,异常处理,输出信息不完整)
用户不友好
索引之后的问题,如果被删除,但是仍然可以被检索(功能缺陷)
检索的结果数量限制,排序策略,给用户提供可配置的机会
索引的目录和文件以及排除的目录和文件,给用户提供可配置的机会
文件系统的监控,文件系统中文件的新增,删除
解决问题
Review(检查代码)
大家根据情况完善
删除文件的清理工作
5 问题 java -jar my-everything-1.0.0jar
- 目的:通过执行程序的时候,传入参数,让配置信息可以变换
- 解析
java -jar my-everything-1.0.0.jar
–maxReturn=40
–deptOrderByAsc=false
–includePath=D:\;E:\workspace
–excludePath=E:\workspace\java4code
6. 文件系统监控
文件(目录)新增,删除
监控操作系统的文件系统中文件的变化
解决方案:
- JDK提供的文件监控(WatchService)
FileSystem WatchService(只能监听一级目录,无法监听更深层次目录)
Apache Commons IO 开源库
- IO工具
- Input Output
- Filter
- Comparator
- File mointer
1
2
3FileAlterationListener //接受文件系统通知,处理业务,是自己要 实现的一个接口
FileAlterationMoniter //负责调度,启动,停止监听器,添加通知 者,依赖Observe
FileAlterationObserve //如果文件发生变化,发送一个通知告诉 listener去执行处理,需要依赖需 listener对象
如何判断文件发生改变?
- 重新执行index
- 遍历文件系统(自己规定间隔时间)
StringBuilder与StringBuffer
- 方法在栈区储存,独立
- 放在属性上使用时牵扯到线程安全,StringBufffer
broncho