Java 实现遍历一个文件夹,文件夹有100万数据,获取到修改时间在2天之内的数据
目录
- 1 需求
- 2 实现1(第一种方法)
- 2 实现2 (推荐使用这个,快)
- 3 实现3(推荐)
1 需求
现在有一个文件夹,里面会一直存数据,动态的存数据,之后可能会达到100万,1千万数据。
那么为了查询这个文件夹里面2天之内的数据,根据修改时间进行查询,我们如何操作
2 实现1(第一种方法)
/*** 遍历出一个文件夹下的全部的数据* */public static void getAllFile(File fileInput, List<File> allFileList) {// 获取文件列表File[] fileList = fileInput.listFiles();if (!ArrayUtil.isEmpty(fileList)) {for (File file : fileList) {if (file.isDirectory()) {// 递归处理文件夹// 如果不想统计子文件夹则可以将下一行注释掉getAllFile(file, allFileList);} else {// 如果是文件则将其加入到文件数组中allFileList.add(file);}}}}/*** 一个文件夹下前两天的全部的数据* */public static List<File> listOrderByDate(String fliePath) {// 存放的是一个文件夹下的全部的数据List<File> allFileList = new ArrayList<>();getAllFile(new File(fliePath), allFileList);long start = DateUtil.offsetDay(new Date(), -2).getTime();long end = new Date().getTime();List<File> collect = allFileList.parallelStream().filter(x -> x.lastModified() > start && x.lastModified() < end).collect(Collectors.toList());List<File> sortedCollect = collect.stream().sorted((t1, t2) -> Long.compare(t2.lastModified(), t1.lastModified())).collect(Collectors.toList());return sortedCollect;}
public static void main(String[] args) {long beginTime = System.currentTimeMillis();String psth = "D:\\100w\\dest";// 遍历文件夹List<File> files = listOrderByDate(psth);System.out.println(files.size());long endTime = System.currentTimeMillis();long l = endTime - beginTime;System.out.println(l/1000);


使用上面的方法,72608个文件,大小 都是50MB 左右的文件,花费了15秒
2 实现2 (推荐使用这个,快)
public static void main(String[] args) throws InterruptedException, ExecutionException {long beginTime = System.currentTimeMillis();String folderPath = "D:\\100w\\dest"; // 替换为实际的文件夹路径int numThreads = Runtime.getRuntime().availableProcessors(); // 获取可用的处理器核心数// 获取当前时间Date currentDate = new Date();// 计算两天前的时间long twoDaysAgoMillis = currentDate.getTime() - 2 * 24 * 60 * 60 * 1000;// 创建文件对象表示文件夹File folder = new File(folderPath);// 获取文件夹下的所有文件File[] files = folder.listFiles();// 创建线程池ExecutorService executor = Executors.newFixedThreadPool(numThreads);// 创建任务列表List<Callable<List<File>>> tasks = new ArrayList<>();// 将文件列表分成多个子列表int batchSize = 10000; // 每个子列表的大小if (files != null) {for (int i = 0; i < files.length; i += batchSize) {final int startIndex = i;final int endIndex = Math.min(i + batchSize, files.length);// 创建子任务,每个子任务处理一个子列表的文件Callable<List<File>> task = () -> {List<File> result = new ArrayList<>();for (int j = startIndex; j < endIndex; j++) {File file = files[j];// 检查文件最后修改时间是否在两天内if (file.lastModified() >= twoDaysAgoMillis) {result.add(file);}}return result;};tasks.add(task);}}// 提交并行任务List<Future<List<File>>> futures = executor.invokeAll(tasks);// 收集结果List<File> result = new ArrayList<>();for (Future<List<File>> future : futures) {result.addAll(future.get());}// 关闭线程池executor.shutdown();// 处理结果,例如打印文件名System.out.println(result.size());long endTime = System.currentTimeMillis();long l = endTime - beginTime;System.out.println(l/1000);

获取是1秒
3 实现3(推荐)
public static void main(String[] args) {long start = System.currentTimeMillis();String folderPath = "D:\\100w\\dest"; // 替换为实际的文件夹路径List<File> modifiedFiles = getModifiedFilesWithinTwoDays(folderPath);System.out.println("修改时间在2天之内的文件数量: " + modifiedFiles.size());long end = System.currentTimeMillis();long ss = end - start;System.out.println(ss/1000);// 处理修改时间在2天之内的文件数据}public static List<File> getModifiedFilesWithinTwoDays(String folderPath) {List<File> modifiedFiles = new ArrayList<>();File folder = new File(folderPath);if (folder.exists() && folder.isDirectory()) {File[] files = folder.listFiles();if (files != null) {Instant twoDaysAgo = Instant.now().minus(Duration.ofDays(2));for (File file : files) {try {BasicFileAttributes attrs = Files.readAttributes(file.toPath(), BasicFileAttributes.class);Instant lastModifiedTime = attrs.lastModifiedTime().toInstant();if (lastModifiedTime.isAfter(twoDaysAgo)) {modifiedFiles.add(file);}} catch (Exception e) {e.printStackTrace();}}}}return modifiedFiles;}

相关文章:
Java 实现遍历一个文件夹,文件夹有100万数据,获取到修改时间在2天之内的数据
目录 1 需求2 实现1(第一种方法)2 实现2 (推荐使用这个,快)3 实现3(推荐) 1 需求 现在有一个文件夹,里面会一直存数据,动态的存数据,之后可能会达到100万&am…...
持续集成部署-k8s-命令行工具:基础命令的使用
持续集成部署-k8s-命令行工具:基础命令的使用 1. 资源类型与别名2. 资源操作2.1 创建对象2.2 显示和查找资源2.3 更新资源2.4 修补资源2.5 编辑资源2.6 scale 资源2.7 删除资源3. 格式化输出1. 资源类型与别名 资源类型缩写别名clusterscomponentstatusescsconfigmapscmdaemon…...
使用python脚本的时间盲注完整步骤
文章目录 一、获取数据库名称长度二、获取数据库名称三、获取表名总长度四、获取表名五、获取指定表列名总长度六、获取指定表列名七、获取指定表指定列的表内数据总长度八、获取指定表指定列的表内数据 一、获取数据库名称长度 测试环境是bwapp靶场 SQL Injection - Blind - …...
C++项目:仿mudou库one thread one loop式并发服务器实现
目录 1.实现目标 2.HTTP服务器 3.Reactor模型 3.1分类 4.功能模块划分: 4.1SERVER模块: 4.2HTTP协议模块: 5.简单的秒级定时任务实现 5.1Linux提供给我们的定时器 5.2时间轮思想: 6.正则库的简单使用 7.通用类型any类型的实现 8.日志宏的实现 9.缓冲区…...
【算法训练-贪心算法 一】买卖股票的最佳时机II
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【贪心算法】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
单阶段目标检测与双阶段目标检测的联系与区别
🚀 作者 :“码上有钱” 🚀 文章简介 :AI-目标检测算法 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬简介 双阶段目标检测算法与单阶段目标检测算法在工作原理和性能方面存在一些相似与差异之处。下…...
Mysql技术文档--设计表规范式-一次性扫盲
阿丹: 在设计表的时候经常出现一些问题,其实自己很清楚就是因为在设计表的时候没有规范。导致后期加表的时候出现了问题。所以趁着这个假期卷一卷。同时只有在开始的时候 几大范式 在关系型数据库中,数据表设计的基本原则、规则就称为范式。…...
python socket 传输opencv读取的图像
python socket网络编程 将ros机器人摄像头捕捉的画面在上位机实时显示,需要用到socket网络编程,提供了TCP和UDP两种方式 TCP服务器端代码: 创建TCP套接字: s socket(AF_INET, SOCK_STREAM) 创建了一个TCP套接字。SOCK_STREAM 表示这是一个TCP套接字&…...
APACHE NIFI学习之—UpdateAttribute
UpdateAttribute 描述: 通过设置属性表达式来更新属性,也可以基于属性正则匹配来删除属性 标签: attributes, modification, update, delete, Attribute Expression Language, state, 属性, 修改, 更新, 删除, 表达式 参数: 如下列表中,必填参数则…...
BIT-7文件操作和程序环境(16000字详解)
一:文件 1.1 文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明…...
冥想第九百二十八天
1.今天周三,今天晚上日语课上了好久,天气也不好, 2.项目上全力以赴的一天。 3.感谢父母,感谢朋友感谢家人,感谢不断进步的自己。...
深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)
目录 前言 环境配置 Quartz 什么是Quartz? 应用场景 核心组件 Job JobDetail Trigger CronTrigger SimpleTrigger Scheduler 任务存储 RAM JDBC 导入依赖 定时任务 销量统计 Redis检测 使用 编辑 注意事项 前言 在悦享校园1.0中引入了Quart…...
Lucene-MergePolicy详解
简介 该文章基于业务需求背景,因场景需求进行参数调优,下文会尽可能针对段合并策略(SegmentMergePolicy)的全参数进行说明。 主要介绍TieredMergePolicy,它是Lucene4以后的默认段的合并策略,之前采用的合并…...
数据的加解密
文章目录 分类特点业务的使用补充 分类 对称加密算法非对称加密算法 特点 对称加密算法 : 加密效率高 !加密和解密都使用同一款密钥 但是有一个问题 : 密钥如何从服务端发给客户端? (假如你直接先将密钥发给对方,要是在过程中被黑客技术破解了,那后面的消息也就泄漏了) (后…...
【Spring】更简单的读取和存储对象
更简单的读取和存储对象 一. 存储 Bean 对象1. 前置工作:配置扫描路径2. 添加注解存储 Bean 对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储&…...
【LeetCode热题100】--108.将有序数组转换为二叉搜索树
108.将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二叉搜索树的中序遍历是升序…...
Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群
十一、持久化RDB和AOF 持久化:将数据存入硬盘 11.1 RDB(Redis Database) RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 备份…...
【智能家居项目】裸机版本——设备子系统(LED Display 风扇)
🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 输入子系统中目前仅实现了按键输入,剩下的网络输入和标准输入在以后会逐步实现&am…...
[Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案
内核:Linux 6.5.5-arch1-1 Plasma 版本:5.27.8 窗口系统:Wayland 1 问题 在前些时候置入了一块显示器,接口较多,有 HDMI 接口,type-C 接口。在 X11 中可以找到外接显示器,但是卡顿明显…...
【计算机网络】高级IO之select
文章目录 1. 什么是IO?什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误?对错误码的进一步判断检测数据没有就绪时,返回做一些其他事情完整代码myt…...
C++的std--ranges中的优化异构
C的std::ranges中的优化异构:现代编程的效率革命 C20引入的std::ranges库彻底改变了算法和容器的交互方式,其中优化异构(Heterogeneous Optimization)技术尤为引人注目。传统算法在处理不同类型的数据时,往往需要显式…...
ESP32+BC260Y+L76K开发板实战:NB-IoT户外定位数据上传MQTT全流程(附避坑指南)
ESP32BC260YL76K开发板实战:NB-IoT户外定位数据上传MQTT全流程(附避坑指南) 在物联网应用快速发展的今天,户外定位数据的采集与传输已成为智慧农业、资产追踪、环境监测等领域的核心需求。ESP32作为一款高性价比的Wi-Fi/蓝牙双模芯…...
企业级流程引擎如何重塑低代码开发?基于Vite+Vue3的可视化建模实践
企业级流程引擎如何重塑低代码开发?基于ViteVue3的可视化建模实践 【免费下载链接】vite-vue-bpmn-process 基于 Vite TypeScript Vue3 NaiveUI Bpmn.js 的流程编辑器(前端部分)。支持高度自定义🚀🚀🚀。…...
安全第一:OpenClaw+GLM-4.7-Flash的本地化数据处理方案
安全第一:OpenClawGLM-4.7-Flash的本地化数据处理方案 1. 为什么我们需要本地化AI解决方案 上个月我帮一位律师朋友处理合同审查任务时,遇到了一个棘手问题——他需要分析上百份涉及商业机密的文件,但担心使用云端AI服务会导致数据泄露。这…...
深求·墨鉴实战教程:DeepSeek-OCR-2 API接入企业OA系统实现自动归档
深求墨鉴实战教程:DeepSeek-OCR-2 API接入企业OA系统实现自动归档 1. 引言:企业文档管理的痛点与解决方案 在日常办公中,企业每天都会产生大量的纸质文档和电子文件,包括合同、报表、会议纪要、审批单等。传统的人工归档方式不仅…...
从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比
1. YOLO系列模型的技术演进路径 YOLO(You Only Look Once)系列模型作为目标检测领域的标杆算法,从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新,这使得YOLO系列在实时目标检测任务中始终…...
OpenClaw技能扩展:用QwQ-32B实现公众号自动发布
OpenClaw技能扩展:用QwQ-32B实现公众号自动发布 1. 为什么需要公众号自动化发布 作为一个技术博主,我每周都要在公众号发布2-3篇技术文章。最让我头疼的不是写作本身,而是发布前的繁琐流程:手动调整Markdown格式、生成封面图、上…...
OpenClaw安全方案:nanobot本地模型的数据隐私保护实践
OpenClaw安全方案:nanobot本地模型的数据隐私保护实践 1. 为什么选择本地化部署 去年夏天,我接手了一个特殊项目——为一家小型会计师事务所设计自动化财务文档处理方案。最初考虑使用云端AI服务时,客户明确提出了数据隐私的硬性要求&#…...
Qwen3.5-4B-Claude-Opus行业落地:高校编程教学辅助与算法解题思路生成
Qwen3.5-4B-Claude-Opus行业落地:高校编程教学辅助与算法解题思路生成 1. 模型介绍与教育场景适配性 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专为推理任务优化的轻量级AI模型,特别适合教育领域的应用场景。该模型基于Qwen3.5-4B架…...
Windows服务器部署:OpenClaw守护进程+Qwen3-32B镜像长期运行
Windows服务器部署:OpenClaw守护进程Qwen3-32B镜像长期运行 1. 为什么需要服务器级部署? 去年我尝试在个人笔记本上运行OpenClaw时,经常遇到两个头疼的问题:一是夜间执行任务时电脑休眠导致流程中断,二是长时间运行后…...
