栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件搜索关键字(怎么查找文件内容的关键字)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件搜索关键字(怎么查找文件内容的关键字)

利用Java语言的文件基本操作和文件读写内容对包含关键字的文件进行查找路径操作

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 全文解锁 {
    public static void main(String[] args) throws IOException {
        //1.用户输入待搜索的路径和关键词
        //2.遍历目录和文件进行查找
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的根路径");
        String rootDir=scanner.next();
        File rootFile=new File(rootDir);
        if(!rootFile.isDirectory()){
            System.out.println("目录不存在");
            return;
        }
        System.out.println("请输入查询的关键词");
        String query=scanner.next();
        //遍历文件进行匹配
        List result=new ArrayList<>();
        scanDirWithContent(rootFile,query,result);
        for ( File F:result
             ) {
            System.out.println(rootFile.getCanonicalPath());

        }
    }

    private static void scanDirWithContent(File rootFile, String query, List result) {
        File[]files=rootFile.listFiles();
        if(files==null||files.length==0){
            return;
            //空的目录直接返回
        }
        for (File f:files) {
            if(f.isDirectory()){
                scanDirWithContent(f,query,result);
            }else {
                //文件名是否包含关键字
                if (f.getName().contains(query)) {
                    result.add(f);
                }
                //文件内容是否包含关键字
                else if(isContains(f,query)){
                    result.add(f);
                }
            }
        }
    }
    public static boolean isContains(File f,String query){
        StringBuilder stringBuilder=new StringBuilder();
        try(InputStream inputStream= new FileInputStream(f)){
            Scanner scanner=new Scanner(inputStream,"UTF-8");
                while (scanner.hasNextLine()){
                    String line=scanner.nextLine();
                    stringBuilder.append(line+"n");
                }
            }
        catch (IOException e){
            e.printStackTrace();
        }
        return stringBuilder.indexOf(query)!=-1;
    }
}

这个方法不适合大规模的文件查找因为效率比较慢,一款应用名为everything的应用查找速度较快,其原理是在电脑处于空闲状态时,自动遍历电脑中的文件,提前备份,相当于使用者在调用的时候免除了查找的过程,相当于工作提前做完,只等检查了,因此以提高效率,具体的提前查找与该方法类似

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号