`

利用线程池实现文件搜索

阅读更多

1、类MulFilesFind:

 

package cy.thread.pool;

import java.io.File;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MulFilesFind {
 
 public static String filename;
 private ThreadPoolExecutor threadPool;
 
 public ThreadPoolExecutor getThreadPool() {
  return threadPool;
 }

 public void setThreadPool(ThreadPoolExecutor threadPool) {
  this.threadPool = threadPool;
 }

 public MulFilesFind(String filename){
  this.filename = filename;
  threadPool = new ThreadPoolExecutor(50,100,15,TimeUnit.SECONDS,new ArrayBlockingQueue(100),new ThreadPoolExecutor.CallerRunsPolicy());
 }

 public void findFiles(String path){
  File file = new File(path);
  
  if(file.isDirectory()){
   File[] listfiles = file.listFiles();
   if(null != listfiles){  //经过测试,发现如果文件夹下没有文件,那么会报空指针异常。
    for(int i=0; i<listfiles.length; i++){
     threadPool.execute(new FilesHandler(listfiles[i])); //往工作队列中添加任务
    }
   }

  }


 }
 
 
 
 /*
  *
  * 内部类
  * 
  */
 class FilesHandler implements Runnable{
  private File file;
  
  public FilesHandler(File file){
   this.file = file;
  }

  public void run() {
   // TODO Auto-generated method stub
   String _filename = file.getName();
   String _filepath = file.getPath();
//   System.out.println(_filepath);
   if(filename.equals(_filename) && file.isFile()){
    System.out.println(_filepath);
   }
   else if(file.isDirectory()){
    findFiles(_filepath);
   }
  }

 }
 
}

 

 

2、测试主函数:

package cy.thread.pool;

import java.io.File;

public class MainTest {
 /*
  *
  *
  * 利用我们的线程池来实现我们的文件搜索功能。
  *
  */
 public static void main(String ad[]){
  
  MulFilesFind find = new MulFilesFind("新建文本文档.txt");
  
  find.findFiles("E:");
  
 }
}

0
0
分享到:
评论
2 楼 w2c2y2 2009-10-08  
hugo 写道
你好,我现在对java同步很感兴趣,想多了解Excuter,Fuge等知识,请问有哪些材料可以帮助我了解?


java 的同步,关键字是synchronized吧。 你讲的Excuter, Fuge,没明白。
java同步,你可以在网上搜索一下吧!资料很多的
1 楼 hugo 2009-10-05  
你好,我现在对java同步很感兴趣,想多了解Excuter,Fuge等知识,请问有哪些材料可以帮助我了解?

相关推荐

    epoll、线程池实现在线电子词典

    本项目"epoll、线程池实现在线电子词典"就是利用这两种技术来实现一个高效、稳定的服务端,能够处理大量来自客户端的查询请求。 epoll(Event Poll)是Linux内核提供的一种I/O多路复用机制,它允许单个进程监控多个...

    线程池实现蚁群算法的简单并行

    线程池实现蚁群算法的简单并行是一种高效利用系统资源、提高程序执行效率的方法。在多核处理器和并发编程盛行的今天,线程池已经成为处理大量并发任务的标准模式。本话题将深入探讨线程池的基本概念、蚁群算法以及...

    多线程全面遍历磁盘文件

    4. **遍历算法优化**:遍历文件时,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)。DFS通常用于查找特定文件,而BFS更适合获取文件系统的整体结构。在多线程环境下,BFS通常更合适,因为它能更好地分配工作负载...

    文件扫描处理程序

    结合这些知识点,一个高效的文件扫描处理程序可以智能地调度线程,利用线程池避免频繁创建和销毁线程,通过模板模式和访问者模式灵活处理不同类型的文件,同时利用递归来遍历复杂的目录结构。这种程序设计方式既保证...

    java全盘文件搜索

    在Java编程领域,实现全盘文件搜索是一项常见的任务,尤其对于开发者来说,高效地查找特定文件至关重要。本程序是利用Java编写的一个小型实用工具,它能够根据用户设定的条件(如文件大小、文件名)快速搜索整个磁盘...

    多线程文件搜索工具 源代码 可以快速查找文件

    本文将详细解析标题为“多线程文件搜索工具 源代码”的项目,探讨如何利用多线程来实现快速的文件搜索,并针对描述中提到的“按暂停时卡死”的问题进行分析。 首先,我们要理解多线程的基本概念。在单线程程序中,...

    一个多线程文件搜索的例子

    "SearchDemo"可能是一个用编程语言实现的文件搜索工具,它可能采用了以下策略: 1. **线程池**:为了更好地管理和控制线程,SearchDemo可能使用了线程池。线程池预先创建了一定数量的线程,需要时从池中获取,完成...

    java编写的文件搜索器

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

    商业编程-源码-《运用多线程技术实现文件的快速搜索》配套代码.zip

    这个压缩包“商业编程-源码-《运用多线程技术实现文件的快速搜索》配套代码.zip”包含了与多线程相关的源码,这些代码可能是为了实现一个高效的文件搜索功能。下面我们将详细讨论多线程技术以及如何应用到文件搜索中...

    多线程文件搜索器

    多线程文件搜索器是一种高效的应用程序,它利用多线程技术来并行搜索文件系统中的特定文件。这种技术尤其适用于大型文件系统,因为它可以显著提高搜索速度,缩短用户等待时间。下面我们将详细探讨多线程和文件搜索这...

    使用多线程进行文件搜索

    在这个“使用多线程进行文件搜索”的主题中,我们将深入探讨如何利用多线程来优化文件搜索操作,特别是在VC++6.0环境下。 1. **多线程的基本概念** - 线程是操作系统中的一个执行单元,每个线程都拥有自己的执行上...

    用java写的文件搜索工具

    文件搜索工具首先需要遍历指定目录下的所有文件,这可以通过递归调用`File.listFiles()`实现。 2. **正则表达式**:描述中提到的支持正则表达式搜索,这是通过Java的`java.util.regex`包实现的。`Pattern`类用于...

    多线程实现的快速搜索文件 注:网上搜索,已经验证.zip

    本话题主要关注如何使用C#语言实现多线程进行快速的文件搜索。 C#是Microsoft开发的一种面向对象的编程语言,它内置了对多线程的强大支持,这使得开发者可以方便地创建和管理多个线程,从而并发执行任务。在文件...

    基于WINDOWS的多线程文件搜索

    总之,基于Windows的多线程文件搜索技术利用了操作系统提供的API,实现了并行搜索,提高了搜索效率。通过合理的设计和利用同步机制,可以确保线程安全地协作,同时通过负载平衡和线程管理优化整体性能。这个项目为...

    商业编程-源码-一个用多线程实现文件查找的例子.zip

    在这个"商业编程-源码-一个用多线程实现文件查找的例子.zip"压缩包中,包含了一个具体的实例,展示了如何在编程中利用多线程来实现文件查找功能。以下将详细解析这个知识点。 首先,多线程允许程序创建并运行多个...

    everywhere一个文件全文搜索桌面工具

    1. **全文索引**:为了实现快速搜索,"Everywhere"首先会对硬盘上的所有文件进行全文索引。这个过程通常包括分词、去停用词、词干提取等步骤,目的是将文本转化为可搜索的形式。索引的数据结构通常采用倒排索引,...

    利用java实现从百度网站上获取搜索数据

    6. **数据处理与存储**:获取到的数据可能需要进行清洗、格式转换,然后存储到文件或数据库中。Java中,`CSV`或`JSON`库可以用来处理和导出数据,而`JDBC`则可以用来连接和操作数据库。 7. **多线程和异步处理**:...

    按时间或者文件类型扫描主机,发送到特定ftpt.zip

    实现这样的功能,通常需要编程,利用操作系统提供的API或库函数来遍历目录树并获取文件信息。 接着是“加密压缩”。在将文件发送到远程服务器之前,为了保护数据安全和隐私,通常会先对文件进行加密,如使用AES...

    多线程实现的文件搜素工具VC

    在这个"多线程实现的文件搜素工具VC"项目中,我们主要探讨的是如何利用多线程技术来加速文件搜索过程。文件搜索是一个典型的I/O密集型任务,因为涉及到大量的磁盘读取操作,而多线程可以有效地将这些操作分发到不同...

Global site tag (gtag.js) - Google Analytics