`
sean2012
  • 浏览: 46096 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

文件搜索器

阅读更多
文件搜索器

项目截图

        大家都使用文件检索器,当我们找不到我们想到的文件时,我们最快就会想到使用文件检索,快速的查找我们想要的文件;所以功能很简单,大家都很熟悉;我就直接跟大家分享一下我的实现过程。

就两步骤完成:
一、 制作这文件搜索器面板
        首先可以看到这个面板上的组件,两个单行文本域,一个多行文本域,还加上一个按钮,具体的功能在面板上都已经注明了就不多说了。具体代码实现如下:
package FileOpearter;
import java.awt.FlowLayout;
import javax.swing.JFrame;

/**
 * 文件搜索器
 * @author Sean 2012-7-25
 *
 *作业:1、使用File类下的所以方法
 *		2、搜索指定文件夹下的包含指定字符串的文件
 */
public class MyFile extends JFrame {
	public static void main(String [] arge){
		 MyFile finefile = new MyFile();
		 finefile.setUI();
	}

	public void setUI() {
		/**
		 * 设置窗体基本属性
		 */
		this.setTitle("文件搜索");
		this.setSize(600, 400);
		this.setDefaultCloseOperation(3);
		/**
		 * 设置窗体布局——流式布局
		 */
		java.awt.FlowLayout jf = new java.awt.FlowLayout(FlowLayout.CENTER);
		this.setLayout(jf);
		/**
		 * 关键字输入框
		 */
		javax.swing.JLabel key = new javax.swing.JLabel("关 键 字:");
		javax.swing.JTextField keyfield = new javax.swing.JTextField(50);
		/**
		 * 指定目录
		 */
		javax.swing.JLabel path = new javax.swing.JLabel("定 位:");
		javax.swing.JTextField pathfield = new javax.swing.JTextField(50);
		/**
		 * 搜索按键
		 */
		javax.swing.JButton fine = new javax.swing.JButton("执行搜索");
		/**
		 * 显示文本域
		 */
		javax.swing.JTextArea dispaly = new javax.swing.JTextArea("显示结果如下:\n",30,50);
		dispaly.setLineWrap(true);
		/**
		 * 面板添加组件
		 */
		this.add(key);
		this.add(keyfield);
		this.add(path);
		this.add(pathfield);
		this.add(fine);
		this.add(dispaly);
		/**
		 * 可视化窗体
		 */
		this.setVisible(true);
		/**
		 * 为按键加监听器
		 */
		MouseLister mouselister = new MouseLister(keyfield,pathfield,dispaly);
		fine.addMouseListener(mouselister);
		
	}
}

二、 实现监听器
        下面来看一下监听器,监听器是为了监听“执行搜索”这个按钮的,当对象被触发时,相应的“文件搜索”事件就被激活了。那么“文件搜索”这个功能就可以监听器中来完成了。我们来看如何创建监听器及“文件搜索”这个功能的。首先,我们找准添加哪种监听器,现在我们比较熟悉和常用的就是鼠标监听器MouseListener和动作监听器ActionListener;对于这个实例来说两种监听器都可以实现;在这里我们选择鼠标监听器MouseListener吧!请看实例:
package FileOpearter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;

import javax.swing.JTextField;
/**
 * 鼠标监听器
 */

public class MouseLister implements MouseListener{
	private javax.swing.JTextField keyfield;
	private javax.swing.JTextField pathfield;
	private javax.swing.JTextArea dispaly ;
	///全局统计变量
	int count = 0;
	int dircount = 0;
	public MouseLister(JTextField keyfield, JTextField pathfield,javax.swing.JTextArea dispaly ) {
		super();
		this.keyfield = keyfield;
		this.pathfield = pathfield;
		this.dispaly = dispaly;
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		
		// TODO Auto-generated method stub
		/**
		 * 鼠标单击时
		 */
		System.out.println(keyfield.getText());
		System.out.println(pathfield.getText());
		System.out.println("执行搜索!");
		/**
		 * 文件检索
		 */
		String key = keyfield.getText();
		String file = pathfield.getText();
		 
		
		finefile(file,key);
		if(count==0&&dircount==0)
		{System.out.println("没有找到!");
		
		dispaly.insert("没有找到!", 8) ;
		}
		else{ System.out.println("文件"+count+"个,文件夹"+dircount+"个");
		dispaly.insert("文件"+count+"个,文件夹"+dircount+"个", 8) ;}

	
	}
	/**
	 * 递归检索
	 */
	public void  finefile(String file,String key){
	
		
		
		// 如果表示的文件不存在
		java.io.File files = new java.io.File(file);
		if (!files.exists()) {
			return ;
		}
		// 将该文件夹下的所有文件装在一个文件数组中
		java.io.File[] fs = files.listFiles();

		// 如果返回的是null,表示file代表的不是一个文件夹
		if (fs == null) {
			return ;
		}
		
		
		// 遍历数组
		for (int i = 0; i < fs.length; i++) {
			java.io.File f = fs[i];
			// 得到文件的地址
			String str = f.getAbsolutePath();
			// 如果是一个标准文件
			if (f.isFile()) {				
				String filename = f.getName().toLowerCase();
				System.out.println(filename);
				if(filename.indexOf(key)!=-1)
					{System.out.println("找到啦  :"+f);
					dispaly.insert('\n'+"第"+(count+dircount+1)+"个  :"+f, 8);
					System.out.println(filename.indexOf(key));
					count++;
					
					}
				// 如果是一个文件夹
			} else if (f.isDirectory()) {
				String filename = f.getName().toLowerCase();
				if(filename.indexOf(key)!=-1)
					
					{dispaly.insert('\n'+"第"+(count+dircount+1)+"个  :"+f, 8);
					dircount++;System.out.println(filename.indexOf(key));
					
					}				
				// 递归调用
				file = str;
				finefile(str,key);
			}
		}
		return ;
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	}

        监听器创建成功,这个“文件搜索器”就由这两步骤完成了。
三、 分析总结
        实现的代码量很少,但是里面还是涉及到几个关键技术点:
1、 文件类的操作
        在java.io这个包下的类都是对输入输出流操作,而java.io.File这个类是Java 针对文件操作的一个最基础的类, 我们可以通过API文档来看File这个类,它下面包含了大量的方法,比较常用的方法有以下:
public boolean delete()  删除文件
public boolean createNewFile() 创建文件
public String[] list() 将指定路径下的文件或目录名存入字符串数组中
public File[] listFiles() 同样将指定路径下的文件或目录名存入文件数组中
public boolean mkdir() 创建指定目录
public boolean renameTo(File dest) 对指定文件重命名
public static File[] listRoots() 获得所有的根目录,也就是分区
public long getTotalSpace() 获得指定分区的大小
public long getFreeSpace() 获得指定分区空余大小
public int compareTo(File pathname) 按字母顺序比较路径
public long length() 测试指定文件的长度大小
public boolean isFile() 测试指定文件是否为标准文件
public boolean isDirectory() 测试指定文件是否为目录
public boolean exists() 测试指定文件或目录是否存在
public String getAbsolutePath() 返回指定文件的绝对路径
public boolean isAbsolute() 测试该路径名是否为绝对路径名
public String getPath() 返回指定文件的路径
public String getName() 返回指定文件的名字
public String getParent() 返回指定文件父目录的名字
public File getParentFile()返回指定文件父目录
        那么通过这些方法,可以对文件进行简单的操作,有时候我想这些方法看似简单,其实可以用来编写计算机病毒,例如我搜索某台计算机上的文件,找到一个比较大的文件,启动多个线程来往这个文件中写入数据,占满计算机上的物理空间,或者向内存中不断读入数据,占满计算机的内存,这个时候计算机肯定会变得越来越慢,到达一个时候使计算机崩溃掉。呵呵,这是一个设想,我不希望有人真的这样去做。

2、 文件的树形目录结构的访问


        这是我的设计思路图,从这个图中不难看出,这是一个递归过程。在Windows下的目录结构都是树型目录,所以我们可以利用递归的方式来访问这棵树上的每一个结点。
3、 关键字的匹配
我们来看一下实例中的这一步
// 如果是一个标准文件
			if (f.isFile()) {				
				String filename = f.getName().toLowerCase();
				System.out.println(filename);
				if(filename.indexOf(key)!=-1)
					{System.out.println("找到啦  :"+f);
					dispaly.insert('\n'+"第"+(count+dircount+1)+"个  :"+f, 8);
					System.out.println(filename.indexOf(key));
					count++;
					
					}

         如果它是一个文件,就获取它的名字,再通过if(filename.indexOf(key)!=-1)比较,如果这个文件名的前几位字符包含key那么就表明找到了。关键技术在于这个indexOf方法。
  • 大小: 15.4 KB
  • 大小: 6 KB
分享到:
评论

相关推荐

    文件搜索器(文件搜索器)

    文件搜索器,正如其名,是一种能够帮助用户在计算机中快速定位和查找特定文件的工具。在日常工作中,我们常常需要查找存储在电脑中的某个文件,但面对庞大的文件系统,手动逐个文件夹查找无疑效率低下。这时,一个...

    文件搜索器(用于文件的搜索,更改日期等)

    文件搜索器是一款强大的工具,专为用户快速查找和管理计算机中的文件而设计。它具有高效、灵活和易用的特点,能够帮助用户在海量文件中准确地定位到目标文件,节省了大量手动翻阅文件夹的时间。这款软件尤其适用于...

    java编写的文件搜索器

    在Java编程领域,文件搜索器是一个实用的工具,它能够帮助用户快速查找并定位到指定目录下的特定文件或文件类型。这个项目展示了如何利用Java语言的丰富功能来实现这一目标。接下来,我们将深入探讨其中涉及的关键...

    一个多线程文件搜索器

    《一个多线程文件搜索器详解》 在计算机领域,文件搜索是日常操作中不可或缺的一环。传统的文件搜索工具往往依赖单线程进行,这在处理大量数据时可能会显得效率低下,尤其是在大型文件系统中。因此,多线程文件搜索...

    多线程字符串代码文件搜索器

    《多线程字符串代码文件搜索器》 在现代软件开发中,高效地处理大量数据是一项基本需求,尤其是在处理文件系统中的文本数据时。"多线程字符串代码文件搜索器"正是为了解决这一问题而设计的。这个工具是用VC(Visual...

    C#写的文件搜索器

    【标题】"C#写的文件搜索器"是一个基于C#编程语言开发的实用软件,用于在计算机中快速、高效地查找指定类型的文件。这个小工具能够帮助用户在大量的文件和文件夹中定位到他们需要的特定文件,极大地提高了工作效率。...

    QT写的文件搜索器(Designer窗体设计结合代码)

    在这个"QT写的文件搜索器"项目中,开发者结合了Qt Designer的设计功能和编程逻辑,构建了一个能够搜索指定路径下文件的应用程序。 首先,Qt Designer是Qt库的一部分,它提供了拖放式的图形界面设计环境。通过...

    简单文件搜索器的实现

    在IT领域,开发一个简单的文件搜索器是许多初学者和专业人士都可能会遇到的任务。这个"简单文件搜索器的实现"项目旨在教你如何构建一个能够快速查找计算机中特定文件的工具。我们将通过分析给出的源码文件来理解其...

    java文件搜索器

    使用java实现的一个文件搜索器,该搜素器能够自动读出电脑上面已有的盘,使用者可以通过选择指定盘,输入需要搜索的关键字进行搜索,也可以通过文件选择器进行选择,在指定的文件夹中进行搜索,且该过程可中断。

    快速文件搜索器 快速文件搜索器

    快速文件搜索器是一种高效能的计算机工具,设计用于帮助用户在海量的文件系统中迅速找到所需文件。在日常工作中,面对日益增长的文件数量,传统的操作系统内置的文件搜索功能往往显得力不从心,这就催生了快速文件...

    易语言文件搜索器

    《易语言文件搜索器》是一款基于易语言编程的实用工具,专用于在计算机中快速查找特定的文件。这款软件的核心功能在于其高效、简洁的文件搜索机制,为用户提供了便捷的文件定位服务。下面我们将详细解析这款软件的...

    java文件搜索器(完整)

    【Java文件搜索器】是一个基于Java编程语言实现的实用工具,它允许用户在计算机的各个磁盘或指定的文件夹中快速查找特定的文件。这个应用程序利用了Java强大的I/O和文件操作功能,为用户提供了一个方便的方式来定位...

    简单的文件搜索器

    【标题】:“简单的文件搜索器” 【描述】:在信息技术领域,文件搜索是日常工作中一个不可或缺的功能。一个简单的文件搜索器通常是指一个程序或工具,它允许用户在计算机上快速定位和查找特定的文件或文件夹。这个...

    文件搜索器多线程的搜索器

    标题中的“文件搜索器多线程的搜索器”指的是一个采用了多线程技术来提高文件搜索效率的应用程序。在IT领域,多线程是程序设计中的一个重要概念,它允许一个程序同时执行多个任务,以此提升程序性能,尤其是在处理...

    VC6.0 文件搜索器

    "VC6.0 文件搜索器"是一款模仿Windows操作系统自带搜索引擎的工具,专为用户提供快速、高效和精准的文件及文件夹查找服务。该程序利用Visual C++ 6.0开发,对于初学者而言,它是了解和学习编程技术,尤其是文件系统...

    精彩编程与编程技巧-VB中自制文件搜索器...

    ### 知识点:在VB中开发自制文件搜索器 #### 1. 项目概述 在Visual Basic(简称VB)环境中构建一个文件搜索工具,旨在帮助用户高效地查找指定驱动器及其子目录下的文件。本项目的核心功能包括: - 驱动器选择 ...

    超级实用的文件搜索器

    【标题】:“超级实用的文件搜索器” 在我们的日常工作中,高效地管理和寻找文件是必不可少的。传统的操作系统自带的文件搜索功能往往效率低下,不能满足快速查找的需求。这就是“超级实用的文件搜索器”应运而生的...

    android 文件搜索器

    【Android 文件搜索器】是一款专为Android平台设计的应用程序,旨在帮助用户快速、高效地在设备上查找指定的文件。这个工具可能包含了源代码,因此对于开发者来说,它不仅是一个实用工具,也是一个学习和研究的对象...

    多线程文件搜索器.zip

    《深入解析多线程文件搜索器》 在计算机科学领域,多线程技术是一种重要的并发执行方式,尤其在处理大量I/O操作时,如文件搜索。VC6.0中的MFC(Microsoft Foundation Classes)库提供了丰富的支持来创建多线程应用...

Global site tag (gtag.js) - Google Analytics