Java程序——检索文件(含内容)

2023-11-01

项目说明

给定一个指定目录和关键字,扫描其中的文件名和文件内容,找到包含关键字的文件

完整代码

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

public class demo4 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的路径");
        File rootDir = new File(scanner.next());
        System.out.println("请输入要查询的词");
        String toFind = scanner.next();

        scanDir(rootDir,toFind);
    }

    private static void scanDir(File rootDir, String toFind) throws IOException {
        File[] files = rootDir.listFiles();
        if(files == null){
            return;
        }
        for (File f:files) {
            if(f.isDirectory()){
                scanDir(f,toFind);
            } else checkFile(f,toFind);
        }
    }

    private static void checkFile(File f, String toFind) throws IOException {
        if(f.getName().contains(toFind)){
            System.out.println("该文件名中包含关键词:" + f.getCanonicalPath());
        }
        try(InputStream inputStream = new FileInputStream(f)){
            Scanner scanner = new Scanner(inputStream);
            StringBuilder stringBuilder = new StringBuilder();
            while(scanner.hasNextLine()){
                stringBuilder.append(scanner.nextLine() + "\n");
            }
            if(stringBuilder.indexOf(toFind) > -1){
                System.out.println("该文件内容包含关键字: " + f.getCanonicalPath());
            }
        }
    }
}

核心代码

private static void scanDir(File rootDir, String toFind) throws IOException {
    File[] files = rootDir.listFiles();
    if(files == null){
        return;
    }
    for (File f:files) {
        if(f.isDirectory()){
            scanDir(f,toFind);
        } else checkFile(f,toFind);
    }
}

传入一个文件对象和关键字字符串。通过调用listFiles方法,如果文件对象是空,代表该路径下没有任何文件或目录,那么就返回上级目录,否则就将所有该路径下的文件或目录都存储在File数组中,并依次便利,如果是目录,就再次递归,找该目录下的文件,如果是文件,就比较文件名和文件内容中有没有包含关键字

private static void checkFile(File f, String toFind) throws IOException {
    if(f.getName().contains(toFind)){
        System.out.println("该文件名中包含关键词:" + f.getCanonicalPath());
    }
    try(InputStream inputStream = new FileInputStream(f)){
        Scanner scanner = new Scanner(inputStream);
        StringBuilder stringBuilder = new StringBuilder();
        while(scanner.hasNextLine()){
            stringBuilder.append(scanner.nextLine() + "\n");
        }
        if(stringBuilder.indexOf(toFind) > -1){
            System.out.println("该文件内容包含关键字: " + f.getCanonicalPath());
        }
    }
}

先比较文件名中有没有包含关键字,再通过FileInputStream读取文件中全部内容,将所有的内容写成一个字符串,并比较字符串中是否包含关键字

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java程序——检索文件(含内容) 的相关文章

随机推荐

  • Python连接influxdb2.x

    Python连接influxdb2 x 一 调研 1 1 influxdb pypi 1 2 influxdb client pypi 二 连接 2 1 对象源码 2 2 连接实例 三 问题汇总 3 1 token非永久化问题结果 一 调研
  • 人工智能技术与现代应用

    人工智能的定义 人工智能 ArtificialIntelligence AI 学科从1956年正式提出 目前已取得长足的发展 成为一门广泛的交叉和前沿科学 总的说来 人工智能的目的就是让计算机这台机器能够像人一样思考 如果希望做出一台能够思
  • Vue 学习笔记

    Vue js 库 把一些常用的功能封装成一个个函数或者对象 并放到一个JS文件里 目的是为简化原生JS的操作 他是一个封装好的框架 框架 一套架构 提供一套整体解决方案 他能完全搞定整个项目开发 并且很轻松就能解决复杂的问题 vue的特征
  • 华硕天选笔记本电脑能上网但浏览器打不开

    系列文章目录 文章目录 系列文章目录 前言 二 第二种方法 1 打开设置 2 选择更改适配器选项 三 第三种方法 重置网络 1 设置 2 重置网络 前言 华硕天选笔记本电脑能上网但浏览器打不开 网上的方法 1 点击 开始 选择 控制面板 2
  • springboot配置多个数据源(两种方式)

    在我们的实际业务中可能会遇到 在一个项目里面读取多个数据库的数据来进行展示 spring对同时配置多个数据源是支持的 本文中将展示两种方法来实现这个功能 springboot mybatis 第一种方式 在配置文件中配置多个数据源 然后通过
  • 一张图看懂小程序全生态!目前总结最全的,没有之一

    本文为微信公众号 造个程序 ID zgcx007 原创 授权CSDN首发 版权归作者所有 责编 陈秋歌 关注微信开发等领域 寻求报道或者投稿请发邮件至chenqg csdn net 2017年1月9日 小程序发布在万众瞩目中发布 不仅占据了
  • k8s-进阶-工作负载

    一 控制器 Pod 容器组 是 Kubernetes 中最小的调度单元 您可以通过 kubectl 直接创建一个 Pod Pod 本身并不能自愈 self healing 如果一个 Pod 所在的 Node 节点 出现故障 或者调度程序自身
  • 《MFC添加语音功能》

    MFC一般提示都是用消息对话框来处理 同时我们也可以加上语音播报功能 语音播报我们可以调用微软自带的Microsoft Speech API SAPI 5 4 它里面有语音识别 还有有一个Text to Speech 引擎 可以将文本转化为
  • 目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解

    系列文章目录 目标检测 map概念 IoU汇总IoU GIoU DIoU CIoU SIoU EIoU Wiou Focal alpha 目标检测 YOLOv3 YOLOv4 YOLOv5 YOLOv7正负样本匹配 YOLO3损失函数理解
  • linux redhat 离线安装 mysql 8.0.20

    官方文档 https dev mysql com doc refman 8 0 en linux installation rpm html 以下操作都是用 root 用户操作 另配置文件是使用mysqld initialize 生成的 e
  • kafka消费主题和消费组总结

    1 查询kafka主题列表的命令 切换到kafka的安装目录bin目录下 执行如下代码 kafka topics sh list zookeeper zookeeprerIp zookeeperPort 比如 kafka topics sh
  • WSL 的安装、报错解决、使用技巧

    需要Windows10或以上系统版本 如果你的操作系统是Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11 并且你从来没有安装过WSL 你可以使用命令行简单的安装安装 WSL 使用管
  • linux Oops和Panic关系

    常在河边走 哪能不湿鞋 用Linux 总有死机的时候 如果运气好 会看到一些所谓 Oops 信息 在屏幕上或系统日志中 比如 Unable to handle kernel paging request at virtual address
  • 印象笔记、为知笔记、有道云笔记使用比较

    特点比较 印象笔记 为知笔记 有道云笔记 Bear Typora 特点比较 功能 印象笔记 为知笔记 有道笔记 费用 免费 有会员 60 元 年 免费 有会员 手机 PC 云同步 微信保存 网页剪藏 笔记内容加密 共享笔记本 快捷键 批量导
  • 完整LUT解释说明

    什么是LUT 我们业内在LUT的应用方面有着许多混乱的认识 很多人会把LUT看成是一种 黑魔法 然而实际上它们是再正常不过的东西 因此为了帮助大家了解LUT的定义和工作原理 本文将会尽可能详细地为大家讲述LUT以及它的应用 包括用于校准的技
  • 简介JSONObject的各种用法

    1 java对象转化成String String s JSONObject toJSONString javaObject class 2 java对象转化成Object Object str JSONObject toJSON javaO
  • SW-3配置文件

    CS6200 28X EI config hos SW 3 SW 3 config vlan 10 SW 3 config vlan10 name FB YX SW 3 config vlan10 vlan 20 SW 3 config v
  • 树莓派Raspbian Buster/Debian 10 安装ROS

    目录 一些补充 安装ROS 初始化rosdep 测试 平台 树莓派4B 系统版本 2020 05 27 raspios buster arm64 img 一些补充 系统安装参考 树莓派学习笔记 一 烧录系统 无屏幕 配置Wifi和SSH服务
  • QT 元对象解析 及和其他语言区别

    说Qt信号与槽是一个很好机制 不如说Qt的元对象系统很强大 这也是大家讲Qt就必须将信号与槽 讲信号与槽就要讲Qt的元对象系统 当然初学者知道怎么用就OK啦 当然随着你写的代码越多 接触的平台越多的时候 你就会好奇Qt是如何把两个 多个 任
  • Java程序——检索文件(含内容)

    项目说明 给定一个指定目录和关键字 扫描其中的文件名和文件内容 找到包含关键字的文件 完整代码 import java io File import java io FileInputStream import java io IOExce