- 浏览: 385911 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (314)
- java (132)
- 生活 (13)
- javase模式 (6)
- weblogic (4)
- jquery (5)
- sql (21)
- ecside (1)
- el (3)
- css (5)
- spring (7)
- ireport (2)
- linux (14)
- struts2 (2)
- jstl (1)
- rmi (1)
- rose (9)
- js (6)
- swing (4)
- webservice (1)
- jboss (1)
- ejb3 (2)
- xml (1)
- 线程 (9)
- socket (3)
- jms (2)
- tomcat (10)
- 领域驱动 (3)
- json (3)
- 权限 (2)
- jvm (1)
- 书籍 (1)
- eclipse RCP (0)
- 数据库设计 (10)
- 软件分析建模 (5)
- 分析建模 (3)
- hibernate jpa (5)
- Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等 (1)
- 项目管理 (2)
- 财务 (0)
- oracle (2)
- 需求 (2)
- rcp gef (0)
- c++ (1)
- hadoop (2)
- BIGDATA (3)
- c (6)
最新评论
-
lh_kevin:
...
jpa 注解 -
一别梦心:
你好,我也遇到此问题了。就你贴的那段代码,你说了两种解决方式, ...
Hibernate的Antlr在Weblogic中产生Jar冲突的历史缘故以及解决办法 -
fireinjava:
...
el表达式 -
宋建勇:
...
JSON: property "xxx" has no getter method in class "..." -
handawei:
有道理,jpa是orm框架的java标准,它关注的是对象到关系 ...
jpa 注解
首先2个思维:
第一个是:借助阻塞列表,有一个线程把一个文件夹下的所有文件放入列表。
然后是100个线程,循环不断的从列表中取出文件,检查这个文件是否有关键字,有就计数加一,直到列表为空,返回这个线程的计数。整体来说就读取就一百个线程,不断检查。
第二个是:用到递归,一个callable线程,传入一个文件,如果这个文件是个目录,则把它目录下的每个文件传入这个定义的callable线程,如果是个文件 则搜索关键字,最后返回这个线程的计数(目录则返回目录下的所有计数和,文件就返回这个文件的计数),感觉是树形的结构。
贴代码:
第一个:
package v1ch14.FutureTest; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * @version 2010-10-18 上午09:34:18 * @author DaWei han * @EMAIL handawei_1@126.com */ public class MyFutureTest { /** * @param args */ public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.print("Enter the directory eg. D:\\Java\\jdk1.6\\src:"); String directory=in.nextLine(); System.out.println("Enter the key word eg. volatile:"); String keyword=in.nextLine(); System.out.println("finished the input."); final int NUMBER_QUEUE_SIZE=10; final int NUMBER_SEARCH=100; BlockingQueue<File> queue=new ArrayBlockingQueue<File>(NUMBER_QUEUE_SIZE); new Thread(new FileEnumerationTask(queue,new File(directory))).start(); List<FutureTask<Integer>> rsList=new ArrayList<FutureTask<Integer>>(); for(int i=0;i<NUMBER_SEARCH;i++) { FutureTask<Integer> task=new FutureTask<Integer>(new SerachTack(queue,keyword)); rsList.add(task); new Thread(task).start(); } int num=0; for(FutureTask<Integer> taskTwo:rsList) { try { System.out.println("the num is:"+num); num+=taskTwo.get(); System.out.println("the num is:"+num); System.out.println("========================================>"); } catch (Exception e) { e.printStackTrace(); } } System.out.println("the total num is :"+num); } } class SerachTack implements Callable<Integer> { public SerachTack(BlockingQueue<File> queue,String keyword) { this.queue=queue; this.keyword=keyword; } public Integer call() throws Exception { rsNum=0; boolean done=false; while(!done) { File file=queue.take(); if(file==FileEnumerationTask.DUMM) { done =true; queue.put(file); }else{ rsNum+=searchKey(file,keyword); } } return rsNum; } private int searchKey(File file,String keyword) { //此为每行要是有关键字,就加1 // int num=0; // try { // Scanner in=new Scanner(new FileInputStream(file)); // while(in.hasNextLine()) // { // if(in.nextLine().contentEquals(keyword)){ // num++; // }; // } // }catch (FileNotFoundException e) { // e.printStackTrace(); // } // return num; //=======>此为一个文件要是有关键字 就返回1 @1 try { Scanner in=new Scanner(new FileInputStream(file)); while(in.hasNextLine()) { if(in.nextLine().contains(keyword)){ System.out.println("matched in the file:"+file.getPath()); return 1; }; } }catch(FileNotFoundException e) { e.printStackTrace(); } return 0; //<==================== } private Integer rsNum; private BlockingQueue<File> queue; private String keyword; } class FileEnumerationTask implements Runnable { public FileEnumerationTask(BlockingQueue<File> queue,File directory) { this.queue=queue; this.directory=directory; } public void run() { try { searchFile(this.directory); queue.put(DUMM); } catch (InterruptedException e) { e.printStackTrace(); } } public void searchFile(File directory) { try { File[] files=directory.listFiles(); for(File file:files) { if(file.isDirectory())searchFile(file); else queue.put(file); } } catch (InterruptedException e) { e.printStackTrace(); } } public static File DUMM=new File(""); private File directory; private BlockingQueue<File> queue; }
第二个:
package v1ch14.FutureTest; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * @version 2010-10-18 下午02:36:52 * @author DaWei han * @EMAIL handawei_1@126.com */ public class MyFutureTest2 { /** * @param args */ public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.print("Enter the directory eg. D:\\Java\\jdk1.6\\src:"); String directory=in.nextLine(); System.out.println("Enter the key word eg. volatile:"); String keyword=in.nextLine(); System.out.println("finished the input."); FutureTask<Integer> task=new FutureTask<Integer>(new MyMatchCounter(new File(directory), keyword)); new Thread(task).start(); try { System.out.println("the Toatl num is:"+task.get()); } catch (Exception e) { e.printStackTrace(); } } } class MyMatchCounter implements Callable<Integer> { public MyMatchCounter(File directory,String keyword) { this.directory=directory; this.keyword=keyword; } public Integer call() throws Exception { int num=0; List<FutureTask<Integer>> rsList=new ArrayList<FutureTask<Integer>>(); if(directory.isDirectory()) { File[] files=directory.listFiles(); for(File file:files) { MyMatchCounter counter=new MyMatchCounter(file,this.keyword); FutureTask<Integer> task=new FutureTask<Integer>(counter); rsList.add(task); new Thread(task).start(); } }else{ num=search(directory); } for(FutureTask<Integer> taskTwo:rsList) { num+=taskTwo.get(); } return num; } public Integer search(File file) { try { Scanner in=new Scanner(new FileInputStream(file)); while(in.hasNextLine()) { if(in.nextLine().contains(this.keyword)) { System.out.println(" Match the keyword in file:"+file.getPath()); return 1; } } } catch (FileNotFoundException e) { e.printStackTrace(); } return 0; } private File directory; private String keyword; }
下面是用线程池改写第二个:
package v1ch14.ThreadPoolTest; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Scanner; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * @version 2010-10-18 下午04:04:31 * @author DaWei han * @EMAIL handawei_1@126.com */ public class MyThreadPoolTest { /** * @param args */ public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.print("Enter the directory eg. D:\\Java\\jdk1.6\\src:"); String directory=in.nextLine(); System.out.print("Enter the key word eg. volatile:"); String keyword=in.nextLine(); System.out.print("finished the input."); ExecutorService pool=Executors.newCachedThreadPool(); MyMatchCounter counter=new MyMatchCounter(new File(directory),keyword,pool); Future<Integer> result= pool.submit(counter); try { System.out.println("the total number is :"+result.get()); }catch (Exception e) { e.printStackTrace(); } pool.shutdown(); } } class MyMatchCounter implements Callable<Integer> { public MyMatchCounter(File direcotry,String keyword,ExecutorService pool) { this.directory=direcotry; this.keyword=keyword; this.pool=pool; } public Integer call() throws Exception { int num=0; ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>(); File[] files=directory.listFiles(); for(File file:files) { if(file.isDirectory()) { results.add(pool.submit(new MyMatchCounter(file, keyword, pool))); }else { num+=searchFile(file); } } for(Future<Integer> rs:results) { num+=rs.get(); } return num; } private Integer searchFile(File file) { Scanner in=null; try { in= new Scanner(new FileInputStream(file)); while(in.hasNextLine()) { if(in.nextLine().contains(this.keyword)) return 1; } } catch (Exception e) { e.printStackTrace(); }finally{ in.close(); } return 0; } private File directory; private String keyword; private ExecutorService pool; }
发表评论
-
关于线程安全总结(二)
2010-11-12 10:18 793转载:http://www.iteye.com/t ... -
jvm内存模型
2010-11-11 11:25 1794转载:http://www.iteye.com/topic/8 ... -
swing与线程
2010-10-19 11:48 1181swing与线程: 1.如果一个动作需要花费很长 ... -
同步器
2010-10-19 11:38 1075读书笔记: 同步器有:信号量(Semaphore) ... -
读书笔记:排序的执行器
2010-10-18 17:22 991package v1ch14.ThreadPoolTest; ... -
线程池
2010-09-17 11:21 1255程序中可以顺序执行的尽量顺序执行,因为如果程序中包含了太多线程 ... -
callable
2010-09-17 10:20 1238runable可以看做是异步的没参数没返回值的一个线程任务, ... -
线程同步
2010-09-15 15:57 959读后感: 线程同步有2种机制, 一,锁对象+条件对象 二 ...
相关推荐
【MFC 界面程序实现文本文件中关键字的搜索抓取】 MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于构建Windows应用程序。它封装了Windows API,简化了用户界面(UI)的创建和管理。在这个特定的...
标题中的“vb 查找文件内容关键字小程序 递归方法”指的是使用Visual Basic(VB)编程语言编写的一个小型程序,它的功能是搜索指定文件或文件夹内的文本内容,并找出包含特定关键字的所有文件。这个程序利用了递归...
在文本文件中查找关键字是日常编程任务中常见的一环,特别是在大数据分析、日志处理以及文本挖掘等场景中。本文将深入探讨两种不同的方法来实现这一功能:一次性读取整个文件和使用缓冲区分批读取。 首先,一次性...
在Unix系统中,搜索含有特定关键字的文件是一项基础但至关重要的任务。这使得用户能够快速定位到包含所需信息的文件,提高工作效率。Unix提供了一系列强大的命令行工具来帮助用户完成这项工作,其中最常用的是`grep`...
在本文中,我们将深入探讨如何使用C#编程语言来实现一个功能,即在Microsoft Office 2003的文档(doc、xls、ppt)中搜索特定关键字。这个程序的实现涉及了文本处理、文件操作以及对Office文档格式的理解。下面我们将...
标题 "快速检索文件关键字检查涉密文件" 描述的是一种技术,主要用于保密局等机构,目的是迅速定位并识别可能含有敏感或涉密信息的文件。这项技术的核心在于关键字搜索,通过对大量文件内容进行扫描,匹配预设的...
这是一个简单的Java程序,实现根据关键字查找文件的功能: ```java import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; ...
HTML文件关键字搜索是一种技术,主要用于在本地存储的HTML文件中查找特定关键字或短语。这一功能对于信息检索、数据挖掘以及网页分析等场景非常有用。本文将深入探讨HTML文件的关键字搜索技术,包括其原理、实现方法...
批量搜索关键字是日常工作中常见的一种需求,特别是在处理大量文档时,快速定位含有特定信息的文件显得尤为重要。"批量搜索word关键字的程序V1.5版(新增检索文件类型pdf)"是一个专门解决这类问题的实用工具。这个...
我们经常处理一大堆的文件,文件,特别是要替换一些关键字的时候就需要用它了,速度快定位准。...由于文件太多,而且分布在不同的文件夹里面,一个个文件打开去查找实在太麻烦。这个时候,往往会愁死了人。
可以帮助你查找多个文件中是否有你要查找的关键字。
C# 做的查找多个word文件包含关键字 1、实现doc转为docx; 2、指定目录下的所有word文件查找关建字 采用 using NPOI.SS.Formula.Functions; using Microsoft.Office.Interop.Word; 这两个开源组件实现 NPOI.SS....
《批量搜索Word关键字程序V1.4版:高效查找与数据整理工具》 批量搜索Word关键字的程序V1.4版是一款专...其多关键字搜索、多种文件类型支持以及结果的导出功能,使其在同类工具中脱颖而出,成为日常工作中的得力助手。
在统计源文件关键字时,哈希表可以用来存储关键字及其出现次数,快速统计关键字个数。 二分查找,又称为折半查找,是一种适用于有序数组的查找算法。在本项目中,可能会先对C语言关键字列表进行排序,然后使用二分...
这个功能通常被集成在各种文件管理软件、搜索引擎或者脚本程序中,使得用户可以通过输入特定的关键字来查找含有这些关键字的文件,从而快速定位到所需的信息。 实现这一功能的技术基础主要包括文件系统API、文本...
3,在关键字中选择查找的关键字,点击"查找"按钮即可. 说明: 该程序仅是一个玩具程序,仅用于示例. 1,该程序只对PDF文件的第一页进行查找,不查找其他页. 2,该程序只指出关键字是否存在,并没有给出具体位置信息. 3,该...
3)如何对文件中的关键字内容进行查找并替换 4)如何对类似xml文件一样,对文件内的关键字的值进行替换.例如:文本内容:...StudentName="张三".... 把关键字“StudentName”的值替换成"李四"后变成 StudentName="李四...
文件关键字查找C#,支持PDF、ppt/excel、word、txt等主流文件,批量查找。
在IT行业中,尤其是在软件开发领域,关键字查找是处理文本数据时常见的操作,尤其在文本分析、信息检索和数据挖掘中有着广泛的应用。本项目聚焦于使用VC++(Visual C++)进行关键字查找并实现文件内容的归类。下面将...
这不是源代码,是通过C#在VS2010下实现的,可以说是个小工具,实现的功能是:打开某一文件下的所有word文档,然后设置一个或多个关键字,然后查找这些关键字是否在word中出现,并将word文档名和关键字保存在excel的...