用Java仿一个低配版的Everything软件
用Java仿一个低配版的Everything软件
“Everything” 是什么?
“Everything” 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。
不像 Windows 内置搜索,”Everything” 默认显示电脑上每个文件和文件夹 (就如其名 “Everything”)。
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
您在搜索框输入的关键词将会筛选显示的文件和文件夹。
总的来说,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 支持零个或多个文件系统。 而每个文件系统都有一个 [email protected] root} 目录,从中可以访问该文件系统中的所有其他文件。 例如,Windows 平台为每个活动驱动器都有一个根目录; UNIX 平台有一个根目录,即 [email protected] “/”}。 可用文件系统根集会受到各种系统级操作的影响,例如可移动媒体的插入或弹出以及物理或虚拟磁盘驱动器的断开或卸载。
此方法返回一个 [email protected] 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~
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- Java 多线程(七):线程池
- Java 多线程(五):锁(三)
- Java 多线程(四):锁(二)
- Java 多线程(三):锁(一)
- Java 多线程(二):并发编程的三大特性
- Java 多线程(一):基础
- Java SE 18 新增特性
- Java SE 17 新增特性
- Java SE 16 新增特性
- Java SE 15 新增特性
- Java SE 14 新增特性
- Java SE 10 Application Class-Data Sharing 示例
- Java SE 13 新增特性
- Java SE 12 新增特性
- Java SE 11 新增特性
- Java SE 10 新增特性
- Java SE 9 模块化示例
- Java SE 9 多版本兼容 JAR 包示例
- Java SE 9 新增特性
- Java SE 8 新增特性