用Java仿一个低配版的Everything软件

简介: 用Java仿一个低配版的Everything软件

用Java仿一个低配版的Everything软件

"Everything" 是什么?

"Everything" 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。

不像 Windows 内置搜索,"Everything" 默认显示电脑上每个文件和文件夹 (就如其名 "Everything")。

您在搜索框输入的关键词将会筛选显示的文件和文件夹。

总的来说,Everything是一款免费的可以快速检索文件、文件夹的,并且占用资源比较少的Windows应用软件。

制作低配版 "Everything"

我们今天就使用Java来制作一个低配版"Everything"吧!

先上主函数:

public static void main(String[] args) {
    System.out.println("*********************");
    System.out.println("Welcome To Everything");
    System.out.println("*********************");
    
    System.out.println("请输入要查找的文件名:");
    String fileName=scanner.next();
    
    System.out.println("文件名称\t文件路径\t文件大小\t文件最后修改时间");
    
    File[] Drive_letters=File.listRoots();
    for(File dl:Drive_letters)
    {
        find(dl,fileName);
    }
}

这里暂时不使用图形化界面,先是命令行界面,最开始简单输出提示语。

然后输入要查找的文件名或者文件夹名,然后因为Everything是只能在Windows下运行,所以我们只考虑Windows环境下查找文件。(窃喜~)

而Windows的文件系统可能有多个根目录,所以我们用到File.listRoots(),下面来介绍一下File.listRoots()。

介绍File.listRoots()

Java 支持零个或多个文件系统。 而每个文件系统都有一个 {@code root} 目录,从中可以访问该文件系统中的所有其他文件。 例如,Windows 平台为每个活动驱动器都有一个根目录; UNIX 平台有一个根目录,即 {@code "/"}。 可用文件系统根集会受到各种系统级操作的影响,例如可移动媒体的插入或弹出以及物理或虚拟磁盘驱动器的断开或卸载。

此方法返回一个 {@code File} 的对象数组,这些对象表示可用文件系统的根目录。 可以保证本地机器上物理存在的任何文件的规范的路径名都可以以该方法返回的其中一个根(例如Windows平台下的C、D、E)开始。

使用File.listRoots()就可以得到电脑的文件系统的各个根目录,然后分别在各个根目录寻找我们要找的文件。

下面看一看我们写的查找文件的函数。

public static void find(File file, String fileName) {
        if (null != file) {
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                if (null != files && files.length > 0) {
                    for (File f : files) {
                        find(f, fileName);
                    }
                }

            } else {

                String fName = file.getName();


                if (fName.contains(fileName)) {
                    String fileResultName = file.getName();
                    String fileResultPath = file.getAbsolutePath();
                    long fileResultSize = file.length();
                    long fileResultModify = file.lastModified();

                    System.out.println(fileResultName + "\t" + fileResultPath + "\t" + fileResultSize + "\t" + fileResultModify);
                }
            }
        }
    }

先是判断文件或文件夹是否为空,这些文件或文件夹可能是隐藏的或者是被保护的。

然后判断这个file是否是文件夹,如果是文件夹,就使用file.listFiles()获取里面所有文件,得到一个文件类型数组。

然后判断文件夹是否为空,如果为空,则不进去。如果不为空,遍历文件类型数组,然后每次都使用递归继续查找。

如果这个file不是文件夹,就不需要递归了。

我们比对这个文件的文件名是否与要查找的一致,如果一致就打印文件或文件夹的文件名\文件夹名、绝对路径、文件\文件夹大小和最后修改时间。

The End..

See you~

目录
相关文章
|
5月前
|
Java Linux 开发者
软件体系结构 - Java垃圾收集器
【4月更文挑战第22天】软件体系结构 - Java垃圾收集器
49 4
|
2天前
|
缓存 算法 Java
Java 实现的局域网管控软件的性能调优
局域网管控软件在企业网络管理中至关重要,但随着网络规模扩大和功能需求增加,其性能可能受影响。文章分析了数据处理效率低下、网络通信延迟和资源占用过高等性能瓶颈,并提出了使用缓存、优化算法、NIO库及合理管理线程池等调优措施,最终通过性能测试验证了优化效果,显著提升了软件性能。
12 1
|
3月前
|
JavaScript 前端开发 Java
Java入门软件及基础语法
**摘要:** - **IDEA:** IntelliJ IDEA,顶级Java开发环境,支持Java,JS,JQuery,Ajax调试. - **JDK:** Java开发包含编译器`javac`,JVM,辅助运行Java程序,核心含JRE,tools.jar,rt.jar. - **Git:** 分布式版本控制,管理源代码,支持回溯,协作,远程备份. - **基础语法:** - `if`: 控制流,单/多分支选择,可嵌套,省略单行大括号. - `switch`: 表达式匹配`case`值,执行对应代码,需`break`防穿透.
24 1
|
3月前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
3月前
|
供应链 安全 Java
软件架构一致性问题之通过软件供应链管理提升研发体验如何解决
软件架构一致性问题之通过软件供应链管理提升研发体验如何解决
47 0
|
4月前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
46 4
|
4月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
38 3
|
4月前
|
Java 关系型数据库 开发者
Java编程设计原则:构建稳健、可维护的软件基石
Java编程设计原则:构建稳健、可维护的软件基石
|
4月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
46 2
|
4月前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
32 1