爬虫

JDBC

  • JDBC驱动

接口:是一种能力,是一种标准,是

Everything 文件搜索

简介

背景

意义

  • 解决Windows命令行下文件搜索问题
  • 基于Java开发的工具可以在Windows和Linux平台无差异使用

实现流程

  1. 交互式
  2. 文件遍历,并存入到数据库
  3. 文件检索

技术

  • java(文件操作)

  • Database(插入式H2数据库或者MySQL数据库)

    关于H2优势:

    • 非常快,开源,JDBC API
    • 内存数据库,支持嵌入式和服务器模式
    • 基于浏览器的Console应用
    • 占地面积小:大小约1.5MB的jar文件大小
  • JDBC

  • Lombok(IDEA安装Lombok插件)

  • java多线程

  • 文件系统监控(Apache Commons IO)

目标:搭建项目

  1. 创建Maven项目

  2. 配置pom

  3. 创建包(按照功能分类)

    • cmd:Everything应用程序的命令行交互程序

    • config:Everything应用程序的配置相关类

    • core:Everything应用程序的具体业务实现

      • common

        将file对象转化为thing对象

      • dao

        数据源的获取与连接,以及业务的CRUD(增删改查)

      • index

        索引加拦截,文件路径遍历

      • interceptor

        拦截器的具体实现

      • model

        基本的模型类抽象

      • search

        检索的实现,实现统一调度器

  4. 创建入口程序

  5. 简单的公共代码开发

  6. git管理

    1. Github创建仓库
    2. 本地仓库中git init
    3. 本地项目中创建 .gitignore添加不加入版本管理的目录和文件
    4. git add . -> git commit -m message
    5. git remote add origin http://xxx
    6. 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.重构

统一调度器(创建线程,分发任务)

  1. 构建索引(依赖index功能,业务FileScan)
  2. 检索数据(依赖search功能,业务FileSearch)
  3. 扩展

命令行客户端

  1. 欢迎
  2. 帮助
  3. 退出
  4. 索引
  5. 检索

发现问题

  1. 代码问题(资源未关闭,异常处理,输出信息不完整)

  2. 用户不友好

  3. 索引之后的问题,如果被删除,但是仍然可以被检索(功能缺陷)

  1. 检索的结果数量限制,排序策略,给用户提供可配置的机会

  2. 索引的目录和文件以及排除的目录和文件,给用户提供可配置的机会

  3. 文件系统的监控,文件系统中文件的新增,删除

解决问题

  1. Review(检查代码)

  2. 大家根据情况完善

  3. 删除文件的清理工作

  4. 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. 文件系统监控

  1. 文件(目录)新增,删除

  2. 监控操作系统的文件系统中文件的变化

    解决方案:

    • JDK提供的文件监控(WatchService)

    FileSystem WatchService(只能监听一级目录,无法监听更深层次目录)

    • Apache Commons IO 开源库

      • IO工具
      • Input Output
      • Filter
      • Comparator
      • File mointer
      1
      2
      3
      FileAlterationListener //接受文件系统通知,处理业务,是自己要						  实现的一个接口	
      FileAlterationMoniter //负责调度,启动,停止监听器,添加通知 者,依赖Observe
      FileAlterationObserve //如果文件发生变化,发送一个通知告诉 listener去执行处理,需要依赖需 listener对象

如何判断文件发生改变?

  • 重新执行index
  • 遍历文件系统(自己规定间隔时间)

StringBuilder与StringBuffer

  • 方法在栈区储存,独立
  • 放在属性上使用时牵扯到线程安全,StringBufffer

broncho