文件系统搜索课程设计报告

  • 格式:doc
  • 大小:247.00 KB
  • 文档页数:20

下载文档原格式

  / 20
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXX大学

课程设计

文件系统搜索

课程名称计算机系统开发综合训练(2)

姓名XXX

院(系)信息科学与技术学院

专业班级计算机123班

学号XXX

指导教师XXX

源代码下载:/s/1mgy2PBU

目录

1.需求分析 (1)

1.1实验原理 (1)

1.2数据结构 (2)

1.3算法描述 (2)

1.4算法流程图 (3)

2.概要设计 (3)

2.1系统流程图 (3)

2.2 模块划分 (4)

3.详细设计 (5)

3.1视图控制模块 (5)

3.2目录管理模块 (10)

3.3关键字管理模块 (11)

3.4文件搜索模块 (11)

3.5结果显示模块 (14)

4.调试分析 (14)

4.1搭建测试环境 (14)

4.2测试结果 (15)

5.总结 (16)

1.需求分析

在日常的学习和办公中,在查找一个或多个文件时,经常要使用到文件搜索的功能。所谓文件搜索,是指用户输入一个关键字,该关键字通常是完整的文件名,或者是部分的文件名,又或者是文件的扩展名,通过匹配用户给出的关键字,从指定的目录中筛选出满足条件的文件。

文件系统搜索应该实现以下几个功能:

1. 接受用户输入的关键字;

2. 接受用户指定的搜索路径;

3. 从指定的路径中搜索所有满足条件的文件;

4. 列举出所有筛选出的文件。

1.1实验原理

在Windows文件系统中,文件都以树型的结构存放。通常在一台计算机中,有多个磁盘,每个磁盘分别为一棵树,其根目录通常形如:C:\,在该目录下,可以有多个子目录,每个子目录下又可以有多个子目录,但每个目录只能有一个父节点(根节点除外,根节点没有父节点)。在一个目录下,每一个文件可以看作是一片叶子,叶子节点没有子目录。

根据文件系统的树型结果原理,在对一个文件进行搜索时,可以先给定一个节点,并以这个节点为根节点,依次遍历该节点下的所有子孙节点。遍历的算法是一个递归的算法,其遍历方式又分为发下几种:

1. 先序遍历;

2. 中序遍历;

3. 后序遍历;

先序遍历:先访问根节点,再访问左子树,最后访问右子树;

中序遍历:先遍历左子树,然后访问根结点,最后遍历右子树。

后序遍历:先遍历左子树,然后遍历右子树,最后访问根结点。

在Java 1.7版本中,新增了两个对文件和目录操作的两个类:Path、Files。通过调用Files类的静态方法Files.walkFileTree(),就可以实现对某一个目录的递归搜索。

Files.walkFileTree()方法需要FileVisitor参数,FileVisitor代表一个文件访问器,walkFileTree()方法会自动遍历start路径下的所有文件和子目录,遍历文件和子目录都会触发FileVisitor中相应的方法。这四个方法在下面的代码中出现。FileVisitor中的四个方法会返回一个FileVisitorResult,它代是一个枚举类,代表访问之后的行为。

FileVisitor定义了如下几种行为:

CONTINUE:代表访问之后的继续行为

SKIP_SIBLINGS:代表继续访问,但不访问该文件或目录的兄弟文件或目录

SKIP_SUBTREE:继续访问,但不访问该目录或文件的子目录

TERMINATE:终止访问

1.2数据结构

文件搜索的结果是一个字符串集合,其中每个字符串是搜索出的文件的完整路径。因此应该使用一个集合类存放搜索的结果,在此程序中使用实现了List接口的ArrayList 来存放搜索的结果。

List集合提供了以下几个常用的操作集合的方法:

add(E elem):住集合中添加元素。

contains(Object o):判断集合中是否存在元素o。

remove(Object o):从集合中移除指定的元素。

size():获取集合中元素的个数。

get(int index):获取集合中先给定索引的元素。

1.3算法描述

扫描目录搜索文件的算法如下:

1. 先确定一个根目录,依次扫描该目录下的所有文件;

2. 匹配用户给出的关键字,如果存在匹配的项,则把该文件的详细路径输出到列表中。

3. 如果当前目录下还有未扫描的目录,则把一个未扫描的子目录作为根目录,转到第1步;如果没有未扫描的子目录且当前不是最开始的根节点,则转到第4步;如果当前根是最开始的根目录,转到第5步;

4. 返回上一级目录,执行第3步;

5. 结束扫描。

1.4算法流程图

2.概要设计

2.1系统流程图

文件系统搜索的整体流程图如图2所示。

2.2 模块划分

系统可分为5大模块:

1. 视图控制模块

2. 目录管理模块

3. 关键字管理模块

4. 文件搜索模块

5. 结果显示模块

视图管理模块:主要负责对整个程序的界面进行管理,绘制软件界面,管理软件中使用的控件,并对控件发出的事件进行响应。

目录管理模块:主要负责对用户输入的目录进行判断,判断用户输入的是不是一个合法的路径,其次判断用户输入的目录是否存在。若路径不存在,则提示用户重新输入,若路径存在,则把用户输入的路径保存起来。

关键字管理模块:主要负责接收用户输入的关键字。如果用户未输入任何关键字,则提示用户应输入内容。如果用户已正确输入了关键字,则把用户输入的关键字保存起来。

文件搜索模块:主要负责在指定的目录下对用户输入的关键字进行搜索,并把搜索的结果保存起来。

结果显示模块:主要负责把文件搜索模块中的搜索结果显示到一个列表中。

3.详细设计

3.1视图控制模块

系统界面上主要有以下几个组件:

1. 路径文本框

2. 路径选择按钮

3. 关键字文本框

4. 搜索按钮

5. 结果显示列表框

具体实现方式如下:

设计一个类MainFrame,即程序的主窗体,该类继承于Jframe类。整个界面分割成两个部分:上半部分用记获取用户输入的搜索路径及关键字,下半部分主要用于显示搜索的结果。在MainFrame类中,创建下列成员:

private DefaultListModel model = new DefaultListModel();

private JList list = new JList(model);