文档章节

java线程池 多线程搜索文件包含关键字所在的文件路径

o
 osc_1ee7cxmx
发布于 2018/08/06 16:40
字数 429
阅读 0
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

文件读取和操作类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test3 {

    private String keyWords;
    
    public Test3(String keyWords){
        this.keyWords = keyWords;
    }
    
    //计算文件数量
    public static int count = 0;
    
    //搜索后查询到的文件路径汇总文件地址
    public static String searchedFilePath = "G:/Document/HongDaXingYe/SearchedDir/searchedFile.txt";
    
    public static File searchedFile = null;
    
    public static FileOutputStream fos = null;
    
    public void search(){
        String path = "G:/Document/HongDaXingYe/Project/oa/workflow/home/weaver/ecology/workflow/";
        File file = new File(path);
        File[] files = file.listFiles();
        getFiles(files);
        System.out.println("count:" + count);
    }
    
    //递归搜索文件并写入搜索到的路径到文件
    public void getFiles(File[] files){
        FileInputStream fis = null;
        try{
            for(File file : files){
                count++;
                if(file.isDirectory()){
                    getFiles(file.listFiles());
                }else{
                    StringBuffer sb = new StringBuffer();
                    byte[] bytes = new byte[1024];
                    fis = new FileInputStream(file);
                    int len = 0;
                    while((len = fis.read(bytes)) != -1){
                        sb.append(new String(bytes, 0, len));
                    }
                    fis.close();
                    if(sb.indexOf(keyWords) >= 0){
                        System.out.println("包含关键字(" + keyWords + ")的文件路径:" + file.getAbsolutePath());
                        fos.write(("包含关键字(" + keyWords + ")的文件路径:" + file.getAbsolutePath() + System.lineSeparator()).getBytes());
                        fos.flush();
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
}

多线程处理类

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TestThread2 implements Runnable{

    private int taskNum;
    private String keyWords;
    
    public TestThread2(int taskNum, String keyWords){
        this.taskNum = taskNum;
        this.keyWords = keyWords;
    }
    
    public static void main(String[] args){
        String searchedFilePath = "G:/Document/HongDaXingYe/SearchedDir/searchedFile.txt";
        File searchedFile = new File(searchedFilePath);
        FileOutputStream fos = null;
        try{
            fos = new FileOutputStream(searchedFile);
            if(!searchedFile.exists()){
                searchedFile.createNewFile();
            }
            Test3.fos = fos;
        }catch(Exception e){
            e.printStackTrace();
        }
        Scanner input = new Scanner(System.in);
        System.out.println("请输入需要搜索的关键字(如果有多个,用英文半角逗号隔开):");
        String keyWordsStr = input.next();
        String[] keyWordsArr = null;
        if(keyWordsStr.indexOf(",") > 0){
            keyWordsArr = keyWordsStr.split(",");
        }else{
            keyWordsArr = new String[]{ keyWordsStr }; 
        }
        input.close();
        LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
        ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 100, 3600, TimeUnit.SECONDS, workQueue);
        for(int i = 0; i < keyWordsArr.length; i++){
            String keyWords = keyWordsArr[i];
            TestThread testThread = new TestThread(i, keyWords);
            executor.execute(testThread);
        }
        if(executor.isTerminated() && Test3.fos != null){
            try {
                Test3.fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    @Override
    public void run() {
        System.out.println("正在执行task " + taskNum);
        System.out.println("当前关键字:" + keyWords);
        Test3 test3 = new Test3(keyWords);
        test3.search();
        System.out.println("task " + taskNum + "执行完毕");
    }
    
}

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

菏泽银行卡

菏泽银行卡 【在线微/Q:391000268】认准一手卡商√全新开户√各大行均有售√资料齐全√诚信合作√信誉100%√选择我们长期合作共赢. 华为将在下半年发布新一代的Mate系列新机。按照惯例,这款...

科技之光
29分钟前
10
0
在哪里可以找到有关在JavaScript中格式化日期的文档? [关闭]

问题: I noticed that JavaScript's new Date() function is very smart in accepting dates in several formats. 我注意到JavaScript的new Date()函数非常聪明,可以接受多种格式的日期。 ......

富含淀粉
29分钟前
3
0
cpp学习:文字常量;变量;指针基本概念

一、文字常量: 文字常量一般指cpp自己定义的一组数值数据类型,“文字”是因为我们只能够以它的值的形式指代它;“常量”是指我们无法改变它的值。每个文字都有其相对应的类型,例如1、2、3...

qwz185_堡垒
昨天
13
0
漫谈代码规范对开发组织的重要性

某项目程序员A因为xxx原因,写了一行烂代码(如图1一行烂代码),项目千辛万苦熬到交接。B接手项目,增加功能,修改代码;然后C继续维护…… 直到某一天X接手这个项目,项目已经很难维护了,...

互联网后端架构
前天
9
0
免费代码 | 头脑风暴优化(BSO)算法求解旅行商问题(TSP)MATLAB代码

各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼账号, 谨防上当受骗 。 hello,大家立秋快乐!今天为各位免费分享 头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码...

suixin_390
08/07
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部