(每日持续更新)jdk api之FileFilter基础、应用、实战
博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。
以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】
一、java.io
1.19 FileFilter
FileFilter 接口是 Java I/O 包中的一个接口,用于过滤文件列表。它定义了一个用于过滤文件的方法,让用户可以指定一些规则,例如仅包括特定类型的文件或满足某些条件的文件。以下是关于 FileFilter 接口的主要信息:
FileFilter 接口介绍:
-
包路径:
java.io
FileFilter 接口所有字段:
FileFilter 接口没有定义字段。
FileFilter 接口构造方法:
FileFilter 接口是一个纯粹的接口,没有构造方法。通常,我们需要实现该接口并提供过滤逻辑。
FileFilter 接口方法摘要:
FileFilter 接口只定义了一个方法:
-
boolean accept(File pathname): 测试指定抽象路径名是否应该包含在文件列表中。该方法返回true表示文件符合过滤条件,应该包含在文件列表中,返回false表示文件不符合过滤条件。
简单使用例子:
以下是一个简单的例子,演示了如何使用 FileFilter 接口实现一个过滤器,用于筛选出目录中的所有文本文件:
javaCopy code
import java.io.File;
import java.io.FileFilter;
public class TextFileFilter implements FileFilter {
@Overridepublic boolean accept(File file) {// 判断文件是否是目录,如果是目录,则包含在文件列表中if (file.isDirectory()) {return true;}
// 获取文件名,并判断是否以 ".txt" 结尾String fileName = file.getName();return fileName.toLowerCase().endsWith(".txt");}
public static void main(String[] args) {// 指定目录路径String directoryPath = "path/to/directory";
// 创建过滤器实例TextFileFilter textFileFilter = new TextFileFilter();
// 获取目录下的所有文件,只包括文本文件File directory = new File(directoryPath);File[] textFiles = directory.listFiles(textFileFilter);
// 输出符合条件的文件列表if (textFiles != null) {System.out.println("Text Files in " + directoryPath + ":");for (File textFile : textFiles) {System.out.println(textFile.getName());}} else {System.out.println("No text files found in " + directoryPath);}}
}
在这个例子中,我们创建了一个实现了 FileFilter 接口的 TextFileFilter 类,该类用于过滤目录中的文本文件。在 accept 方法中,我们首先判断文件是否是目录,如果是目录,则返回 true,表示包含在文件列表中。然后,我们获取文件名,判断文件名是否以 ".txt" 结尾,如果是,则返回 true,表示文件符合过滤条件。最后,在 main 方法中,我们创建了一个目录,并使用 listFiles 方法结合 TextFileFilter 过滤器获取目录下的所有文本文件。
应用场景
以下是一些使用 FileFilter 进行文件和目录过滤的应用场景以及对应的简单实现代码:
1. 过滤指定类型的文件:
-
应用场景: 选择特定类型的文件,如图片文件(.jpg、.png)。
-
实现:
javaCopy code public class ImageFileFilter implements FileFilter {@Overridepublic boolean accept(File file) {if (file.isDirectory()) {return false;}String fileName = file.getName();return fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".png");} }
2. 过滤文件大小:
-
应用场景: 仅获取大于一定大小的文件。
-
实现:
javaCopy code public class LargeFileSizeFilter implements FileFilter {private final long fileSizeThreshold; public LargeFileSizeFilter(long fileSizeThreshold) {this.fileSizeThreshold = fileSizeThreshold;} @Overridepublic boolean accept(File file) {return file.isFile() && file.length() > fileSizeThreshold;} }
3. 过滤最近修改时间:
-
应用场景: 获取最近一段时间内修改过的文件。
-
实现:
javaCopy code import java.util.Date; public class RecentModificationFilter implements FileFilter {private final long timeThreshold; public RecentModificationFilter(long timeThreshold) {this.timeThreshold = timeThreshold;} @Overridepublic boolean accept(File file) {long currentTime = System.currentTimeMillis();long lastModifiedTime = file.lastModified();return currentTime - lastModifiedTime < timeThreshold;} }
4. 过滤目录:
-
应用场景: 仅获取目录,忽略文件。
-
实现:
javaCopy code public class DirectoryFilter implements FileFilter {@Overridepublic boolean accept(File file) {return file.isDirectory();} }
5. 自定义规则过滤:
-
应用场景: 根据自定义规则过滤文件。
-
实现:
javaCopy code public class CustomFilter implements FileFilter {@Overridepublic boolean accept(File file) {// 根据自定义规则判断文件是否符合条件// ...return false;} }
示例用法:
javaCopy code
public class FileFilterExample {
public static void main(String[] args) {String directoryPath = "path/to/files";
// 1. 过滤指定类型的文件File[] imageFiles = new File(directoryPath).listFiles(new ImageFileFilter());
// 2. 过滤文件大小大于1MB的文件File[] largeFiles = new File(directoryPath).listFiles(new LargeFileSizeFilter(1024 * 1024));
// 3. 过滤最近修改时间在一小时内的文件long oneHourInMillis = 60 * 60 * 1000;File[] recentFiles = new File(directoryPath).listFiles(new RecentModificationFilter(oneHourInMillis));
// 4. 过滤目录File[] directories = new File(directoryPath).listFiles(new DirectoryFilter());
// 5. 自定义规则过滤File[] customFilteredFiles = new File(directoryPath).listFiles(new CustomFilter());}
}
在这些例子中,我们创建了不同的 FileFilter 实现,分别用于不同的过滤场景。在实际使用时,可以根据需要选择相应的过滤器来过滤文件和目录。
项目实战
为了更好地说明一个项目实战例子,我们可以考虑一个简单的文件备份工具。该工具可以从指定目录中备份所有的文本文件(.txt)到另一个指定的目录,并且可以指定备份的最大文件大小。
以下是一个简单的项目实战例子:
javaCopy code
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.file.StandardCopyOption;
import java.util.Scanner;
public class FileBackupTool {
public static void main(String[] args) {// 获取用户输入的源目录、目标目录和最大文件大小Scanner scanner = new Scanner(System.in);System.out.print("Enter the source directory path: ");String sourceDirectoryPath = scanner.nextLine();
System.out.print("Enter the target directory path for backup: ");String targetDirectoryPath = scanner.nextLine();
System.out.print("Enter the maximum file size for backup (in bytes): ");long maxFileSize = scanner.nextLong();
// 创建过滤器实例FileFilter textFileFilter = new TextFileFilter();
// 获取源目录下的所有文本文件File sourceDirectory = new File(sourceDirectoryPath);File[] textFiles = sourceDirectory.listFiles(textFileFilter);
// 进行备份if (textFiles != null) {for (File textFile : textFiles) {try {backupFile(textFile, targetDirectoryPath, maxFileSize);} catch (IOException e) {e.printStackTrace();}}System.out.println("Backup completed successfully.");} else {System.out.println("No text files found in the source directory.");}}
static class TextFileFilter implements FileFilter {@Overridepublic boolean accept(File file) {return file.isFile() && file.getName().toLowerCase().endsWith(".txt");}}
private static void backupFile(File sourceFile, String targetDirectory, long maxFileSize) throws IOException {// 判断文件大小是否超过指定限制if (sourceFile.length() > maxFileSize) {System.out.println("Skipping backup of " + sourceFile.getName() + " (file size exceeds limit).");return;}
// 构建目标文件路径String targetFilePath = targetDirectory + File.separator + sourceFile.getName();
// 使用文件通道进行复制try (FileChannel sourceChannel = new FileInputStream(sourceFile).getChannel();FileChannel targetChannel = new FileOutputStream(targetFilePath).getChannel()) {sourceChannel.transferTo(0, sourceChannel.size(), targetChannel);} catch (IOException e) {throw new IOException("Failed to backup file: " + sourceFile.getName(), e);}}
}
在这个例子中,我们创建了一个文件备份工具,用户可以输入源目录、目标目录和最大文件大小的限制。工具会在源目录中查找所有的文本文件(.txt),然后将其备份到目标目录中,但会跳过文件大小超过指定限制的文件。
这个例子演示了如何使用 FileFilter 进行文件过滤,以及如何使用 FileChannel 进行文件复制。请注意,实际文件备份工具可能需要更多的功能和错误处理,这里的代码仅作为一个简单的演示。
相关文章:
(每日持续更新)jdk api之FileFilter基础、应用、实战
博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿&…...
基于Matlab/Simulink开发自动驾驶的解决方案
文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶,能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能,从而推进自动驾驶感…...
gitlab部署
系统版本 [rootlocalhost ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.1 (Plow)gitlab包位置 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el9/gitlab-ee-16.7.2-ee.0.el9.x86_64.rpm关闭防火墙 [rootlocalhost data]# systemctl stop firew…...
JVM运行时数据区(下篇)
紧接上篇:JVM运行时数据区(上篇)-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态…...
生成式 AI 描绘复杂科学
生成式AI可以用来描述复杂的科学问题,主要是通过以下两种方式: 数据生成:生成式AI可以通过学习大量数据来生成新的数据,包括科学实验数据。例如,可以使用生成式AI来模拟复杂的物理实验,生成模拟数据&#…...
<蓝桥杯软件赛>零基础备赛20周--第14周--BFS
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…...
openEuler安装Docker艰辛路程
文章目录 安装docker测试docker关于windows docker拉取镜像查看所有镜像删除镜像删除不在运行的进程强制删除正在运行的进程 启动docker容器服务-d测试 停止docker容器服务查看docker启动进程更新容器(没有自启动功能,更新为自启动)docker端口映射进入容器修改内容退…...
python图像处理总结
等我有时间了,好好总结一下这几个图像处理包,为后面的研究做个铺垫 skimage包 可以用系统自带的图片,不用自己找图片 from skimage.io import imread, imshow from skimage import data image data.astronaut() imshow(image)后面可以拿这…...
腐烂的橘子 -- DFS、BFS
994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…...
java swing UI第三方设计器JFormDesiner和FlatLaf UI
安装JFormDesiner 官网:https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源,且付费的插件,可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷,初学者可能需要一定时间探索,熟…...
前端JS实现全屏和退出全屏的效果
全屏效果想必我们都很清楚把,平时追剧看电视剧什么都会使用全屏方便我们看,我们键盘的第一个键esc可以退出全屏,那么我们如何用js实现全屏的办法呢? 设置全屏 Document.requestFullscreen(),该方法用于异步请求使元素…...
蓝桥杯C组-填充-贪心
点击此处查看原题 *思路:首先要求 00 11 尽可能的多,所以尽可能多的多配对,配对只在i , i 1之间发生,所以只需要关注str[i] 和 str[i 1]即可,如果str[i] str[i 1] ,那么一定配对&#x…...
mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql
以下是一些常见的MySQL查询语句,用于查询当天、近一周、近一个月和近一年的数据,以及一些常见的报表查询。 查询当天的数据: SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据: SELECT * FROM t…...
C# 使用Fleck创建WebSocket服务器
目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器,通过 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速通道;两者之间…...
Android中的SPI实现
Android中的SPI实现 SPI是JVM世界中的标准API,但在Android应用程序中并不常用。然而,它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中,不同的提供者为推送功能提供服务,而在大型项目中…...
什么是设计模式(第7章笔记)
目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式:是对已经分析过的问题,以及相关问题解决方案的优秀实践; 1、同样的问题总是重复出现&…...
【python入门】day27: 模拟高铁售票系统
界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…...
智能助手的巅峰对决:ChatGPT对阵文心一言
在人工智能的世界里,ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能,吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢?下面就让我们一探究竟。 首先来谈谈智能回复能力…...
Android系统开发之浅谈广播接收器回调
广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver,是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢? 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…...
PiflowX如何快速开发flink程序
PiflowX如何快速开发flink程序 参考资料 Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码-腾讯云开发者社区-腾讯云 (tencent.com) Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
