前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Java仿一个低配版的Everything软件

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

作者头像
Regan Yue
发布2021-09-16 10:53:12
4600
发布2021-09-16 10:53:12
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog

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

“Everything” 是什么?

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

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

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

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

制作低配版 “Everything”

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

先上主函数:

代码语言:javascript
复制
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()就可以得到电脑的文件系统的各个根目录,然后分别在各个根目录寻找我们要找的文件。

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

代码语言:javascript
复制
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~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用Java仿一个低配版的Everything软件
    • “Everything” 是什么?
      • 制作低配版 “Everything”
        • 介绍File.listRoots()
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档