【实用工具】文件扫描

article/2025/9/21 18:40:11

闲来无事,想着自己的硬盘里大大小小存了一堆的文件,想去根据文件大小或者修改时间对全盘进行扫描排序,好像windows系统上并不支持这样的功能(只能在单个目录下对当前目录中文件进行排序)。那么咱们就做一个定制化的文件扫描工具,支持如下功能:

  • 指定具体目录,将该目录下所有文件(包括目录下嵌套的目录文件)进行扫描;
  • 扫描结果输出到指定csv中;
  • 可选择根据文件大小排序或者文件修改时间排序;
  • 可对目录下扫描内容做关键字过滤功能;

文件输出后效果如下:

 本文属个人成果,不涉及任何公司机密,故贴出完整实现代码,抛砖引玉,供大家参考。

import org.apache.commons.io.FileUtils;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;public class FileScan {private static final int SORT_BY_SIZE = 1;private static final int SORT_BY_TIME = 2;public static void main(String[] args) {// 读取文件File file = FileUtils.getFile("D:\\迅雷下载");// 遍历文件下目录和文件Map<Long, String> fileMap = buildSortMap();// 搜索关键字String[] filter = {"txt", "exe", "csv"};// 把遍历后的结果进行存储scanFiles(file, fileMap, SORT_BY_SIZE, filter);// 对于存储结果进行输出outputCSV("D:\\111.csv", fileMap);}/*** 构建排序后的map** @return*/private static Map<Long, String> buildSortMap() {return new TreeMap<Long, String>(new Comparator<Long>() {public int compare(Long o1, Long o2) {return o2.compareTo(o1); //用正负表示大小值}});}/*** 输出CSV** @param outputPath* @param fileMap*/private static void outputCSV(String outputPath, Map<Long, String> fileMap) {try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputPath), "UTF-8"));) {String bom = new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});String strings = bom + "文件路径,文件大小,修改日期";out.write(strings);out.newLine();for (Map.Entry<Long, String> entry : fileMap.entrySet()) {out.write(bom + entry.getValue());out.newLine();}out.flush();} catch (Exception e) {e.printStackTrace();}}/*** 扫描文件** @param file* @param map* @return*/private static Map<Long, String> scanFiles(File file, Map<Long, String> map, int sortType, String[] filter) {if (!file.exists()) {return new HashMap<Long, String>();}File[] fileList = file.listFiles();for (File f : fileList) {if (f.isDirectory()) {scanFiles(f, map, sortType, filter);} else {try {if (sortType == SORT_BY_SIZE) {saveDataBySize(map, f, filter);} else if (sortType == SORT_BY_TIME) {saveDataByTime(map, f, filter);}} catch (IOException e) {e.printStackTrace();}}}return map;}/*** 根据文件大小排序,存储** @param map* @param f* @throws IOException*/private static void saveDataBySize(Map<Long, String> map, File f, String[] filter) throws IOException {StringJoiner sj = new StringJoiner(",");buildFileData(map, f, filter, sj);}/*** 根据文件修改时间排序,存储** @param map* @param f* @throws IOException*/private static void saveDataByTime(Map<Long, String> map, File f, String[] filter) throws IOException {StringJoiner sj = new StringJoiner(",");buildFileData(map, f, filter, sj);}/*** 封装map信息** @param map* @param f* @param filter* @param sj* @throws IOException*/private static void buildFileData(Map<Long, String> map, File f, String[] filter, StringJoiner sj) throws IOException {if (filter.length == 0) {sj.add(f.getCanonicalPath());sj.add(transformSize(f.length()));sj.add(getTime(f));map.put(f.length(), sj.toString());} else {for (String fil : filter) {if (f.getCanonicalPath().toLowerCase(Locale.US).contains(fil)) {sj.add(f.getCanonicalPath());sj.add(transformSize(f.length()));sj.add(getTime(f));map.put(f.length(), sj.toString());}}}}/*** 获取** @param file* @return*/private static Long getFileTime(File file) {return file.lastModified();}/*** 获取时间** @param file* @return*/private static String getTime(File file) {Calendar cal = Calendar.getInstance();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");cal.setTimeInMillis(getFileTime(file));return formatter.format(cal.getTime());}/*** 文件大小单位转换** @param size* @return*/private static String transformSize(Long size) {Long sizeGb = size / (1024 * 1024 * 1024);Long sizeMb = size / (1024 * 1024);Long sizeKb = size / (1024);if (sizeGb > 0) {return sizeGb + "G";} else if (sizeMb > 0) {return sizeMb + "M";} else if (sizeKb > 0) {return sizeKb + "K";} else {return size + "B";}}
}

源码传送门:https://github.com/bruceq/leetcode


http://chatgpt.dhexx.cn/article/lfoMxYt7.shtml

相关文章

扫描工具使用

nessus 基础使用 进入这个连接去获取激活码&#xff1a;https://zh-cn.tenable.com/products/nessus/activation-code?tns_redirecttrue 安装好Nessus&#xff0c;自动弹出一个页面&#xff0c;然后去注册 注册成功后连接SSL 出现这个界面说明已经成功了 2 awvs使用 先在虚…

QingScan扫描器安装、使用

一、 QingScan介绍 QingScan是一个安全工具整合系统&#xff0c;解决你平时使用各种工具一个个打 开填写扫描目标的麻烦过程&#xff1b;QingScan工具只需要你把URL给它&#xff0c;它会调 用市面上各种扫描工具&#xff0c;对URL扫描&#xff0c;最后把结果汇聚展示 项目地址…

IP地址扫描程序/扫描工具

随着许多组织采用自带设备 &#xff08;BYOD&#xff09; 等策略&#xff0c;IT 网络变得越来越复杂。随着越来越多的设备连接到网络&#xff0c;IP 地址扫描势在必行&#xff0c;以确保设备在连接到网络时不会遇到问题。IP 地址扫描器是 OpUtils 中的一个模块&#xff0c;是一…

4个万能的扫描工具,各种文件3秒扫描成电子档

分享4个万能的扫描工具&#xff0c;各种图片上的文字、证件照、书籍都能快速扫描成电子档文件&#xff0c;不管是手机还是电脑上的都能扫描成电子文件&#xff0c;大家可以根据自己的需求选择对应的描述工具。 一、手机扫描工具 1、万能图片转换器 一个专门用来处理手机图片…

网络安全的十大最佳网络扫描工具

在当今世界&#xff0c;网络安全不需要介绍或解释。我们都知道&#xff0c;网络安全一词是指保护任何计算机网络&#xff0c;旨在防止任何人以任何方式访问、操纵或滥用网络。因此&#xff0c;我们有与监视和保护计算机网络有关的规则&#xff0c;政策和说明。 网络扫描是维护…

系统扫描器

本次介绍三款系统扫描器&#xff1a; nmap kali系统自带工具 天镜 启明星辰 Nessus 国外排名第一 一、Nmap扫描器 主要功能&#xff1a;主机发现、端口扫描、版本侦测、OS侦测、漏洞扫描 优势&#xff1a; 功能灵…

扫描工具(一)

一、 nmap工具 Nmap 是一种常用工具&#xff0c;可用于判定网络的布局。我们可以在网络上使用 Nmap 来查找主机系统以及打开这些系统的端口。 nmap作用 检测存活在网络上的主机&#xff08;主机发现&#xff09;检测主机上开放的端口&#xff08;端口发现&#xff09;检测相…

利用Google Chrome滚动截屏,截取整个网页

利用Google Chrome滚动截屏 1. 在Chrome浏览器中打开一个网址&#xff0c;比如www.master8687.cn,然后再页面中鼠标右键&#xff0c;选择 检查 项。 2. 在左侧的设备选择区域&#xff0c;选择iPad Pro 3. 然后再more Option选择Capture full size screenshot 4. 此时则会在浏览…

谷歌浏览器截图(截取整个网页)

1、按下键盘上的F12键&#xff0c;进入开发者工具 2、按下组合键CtrlShiftP 3、在搜索框中输入Capture full size screenshot 4、点击Capture full size screenshot选项即可截取长屏 补充说明&#xff1a;截图自动保存保存为png格式的图片文件,可右击打开保存路径的文件夹查…

浏览器截图截取整个页面的方法

浏览器截图截取整个页面的方法进入到你要截取的页面后总共就只有四步: F12 出现了开发者工具&#xff08;有可能是在左边也有可能是右边&#xff0c;或者单独出一个小窗口&#xff09; 如果没有反应的话说明那个页面的F12被禁用了&#xff0c;你需要点击右上方的设置&#xf…

使用谷歌浏览器截图整个网页

使用谷歌浏览器截图整个网页 一、方法一二、方法二 一、方法一 1、首先打开想要截图的网页&#xff0c;按键盘快捷键F12&#xff0c;打开开发人员工具功能。 2、在开发工具页面同时按下Ctrl Shift P&#xff0c;出现输入指令的工具栏 3、在工具栏输入Capture full size sc…

Chrome利器之FireShot:网页长截图工具

首先对于很多写博客写文章的笔友来说&#xff0c;难免少不了一些网页截图或者gif图之类的&#xff0c;现在这里讲的是一个便捷的谷歌浏览器长截图插件&#xff1a;FireShot FireShot功能特点&#xff1a; 可以截取整个页面、可见部分和选定区域&#xff0c;并且支持拖动加载截…

超好用的PC截图工具Snipaste—免费便捷高效

一次电脑软件分享 文章目录 安装方式使用教学深度学习 首先附上安装包 百度网盘Snipaste-2.7.3-Beta-x64版压缩包 链接&#xff1a;https://pan.baidu.com/s/12mWii8lcDCKrt4HKrCUQZg 提取码&#xff1a;5aqj 官网下载地址 snipaste官网下载 snipaste是一款简单但是强大的截…

在电脑浏览器上怎样对一整个页面进行完整的截图?(整站截图)

整站截图 步骤&#xff1a; ①&#xff1a;将整个网站拉到最底部。 ②&#xff1a;右键点击&#xff0c;选择检查。 ③&#xff1a;ctrl shift p快捷键呼出输入框。&#xff08;检查快捷键是否冲突&#xff09; ④&#xff1a;在输入框中输入 capture full size screenshot …

网页滚动截图

首先打开要截屏的网页&#xff0c;然后按F12&#xff0c;打开开发者工具。 然后按CtrlShiftP&#xff0c;调出命令输入框&#xff0c;并在命令框中输入full&#xff0c;这时候应该会列出一个选项&#xff0c;“Screenshot capture full size screen”&#xff0c;点击它&#…

如何对整个网页截图

当网页的长度超过一屏时&#xff0c;如何才能对整个网页的内容截图呢&#xff1f;小一说两个网页截图的方法&#xff01; 1、使用傲游浏览器&#xff08;Maxthon&#xff09; 如果你使用的是傲游浏览器&#xff0c;那你有福了&#xff0c;傲游浏览器可以直接对网页进行截图&a…

JS 实现网页截屏

要实现这个功能就必须要介绍一款特别好用的插件: html2canvas 他的用法也特别傻瓜式只需要两行代码就可以实现网页截屏的功能 html2canvas(document.body).then(function(canvas) {document.body.appendChild(canvas); });下面看例子 这里我们的body标签高度是3023, 浏览器肯…

一款实用的web截图工具(一)

码云地址&#xff1a; 码云 github地址&#xff1a; github kscreenshot 介绍 web截图工具的功能实现基于Canvas技术。其功能主要包括截图&#xff0c;下载&#xff0c;复制以及在截图过程中通过工具栏对截图进行绘制。 使用 具体使用方法请戳 码云 GitHub 实现方式 本…

谷歌浏览器自带网页截屏工具的使用

在平时&#xff0c;我们开发时&#xff0c;经常需要在网页中进行截图&#xff0c;那么&#xff0c;今天来看看谷歌浏览器的截屏工具&#xff0c;首先我们需要打开开发者模式&#xff0c;如下图&#xff1a; 打开开发者模式 然后&#xff0c;同时按"shiftcommandp"按钮…

【截取整个网页】Chrome浏览器快速截屏,高清截图

Chrome版本78&#xff0c;window 10系统 第一步&#xff1a;打开 Chrome 浏览器&#xff0c;输入网址&#xff0c;例如输入网址&#xff1a;https://www.golianghao.com。 第二步&#xff1a;Ctrl shift i 打开浏览器调试模式。 第三步&#xff1a;Ctrl shift p 打开浏览…