当前位置: 首页 > news >正文

(每日持续更新)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年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…...

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…...

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运行时数据区(下篇)

紧接上篇&#xff1a;JVM运行时数据区&#xff08;上篇&#xff09;-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中&#xff0c;可以存放堆上对象的引用。静态变量也可以存放堆对象的引用&#xff0c;通过静态…...

生成式 AI 描绘复杂科学

生成式AI可以用来描述复杂的科学问题&#xff0c;主要是通过以下两种方式&#xff1a; 数据生成&#xff1a;生成式AI可以通过学习大量数据来生成新的数据&#xff0c;包括科学实验数据。例如&#xff0c;可以使用生成式AI来模拟复杂的物理实验&#xff0c;生成模拟数据&#…...

<蓝桥杯软件赛>零基础备赛20周--第14周--BFS

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…...

openEuler安装Docker艰辛路程

文章目录 安装docker测试docker关于windows docker拉取镜像查看所有镜像删除镜像删除不在运行的进程强制删除正在运行的进程 启动docker容器服务-d测试 停止docker容器服务查看docker启动进程更新容器(没有自启动功能&#xff0c;更新为自启动)docker端口映射进入容器修改内容退…...

python图像处理总结

等我有时间了&#xff0c;好好总结一下这几个图像处理包&#xff0c;为后面的研究做个铺垫 skimage包 可以用系统自带的图片&#xff0c;不用自己找图片 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 官网&#xff1a;https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源&#xff0c;且付费的插件&#xff0c;可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷&#xff0c;初学者可能需要一定时间探索&#xff0c;熟…...

前端JS实现全屏和退出全屏的效果

全屏效果想必我们都很清楚把&#xff0c;平时追剧看电视剧什么都会使用全屏方便我们看&#xff0c;我们键盘的第一个键esc可以退出全屏&#xff0c;那么我们如何用js实现全屏的办法呢&#xff1f; 设置全屏 Document.requestFullscreen()&#xff0c;该方法用于异步请求使元素…...

蓝桥杯C组-填充-贪心

点击此处查看原题​​​​​​​ *思路&#xff1a;首先要求 00 11 尽可能的多&#xff0c;所以尽可能多的多配对&#xff0c;配对只在i , i 1之间发生&#xff0c;所以只需要关注str[i] 和 str[i 1]即可&#xff0c;如果str[i] str[i 1] &#xff0c;那么一定配对&#x…...

mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql

以下是一些常见的MySQL查询语句&#xff0c;用于查询当天、近一周、近一个月和近一年的数据&#xff0c;以及一些常见的报表查询。 查询当天的数据&#xff1a; SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据&#xff1a; SELECT * FROM t…...

C# 使用Fleck创建WebSocket服务器

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器&#xff0c;通过 WebSocket API&#xff0c;浏览器和服务器只需要做一个握手的动作&#xff0c;然后浏览器和服务器之间就形成了一条快速通道&#xff1b;两者之间…...

Android中的SPI实现

Android中的SPI实现 SPI是JVM世界中的标准API&#xff0c;但在Android应用程序中并不常用。然而&#xff0c;它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中&#xff0c;不同的提供者为推送功能提供服务&#xff0c;而在大型项目中…...

什么是设计模式(第7章笔记)

目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式&#xff1a;是对已经分析过的问题&#xff0c;以及相关问题解决方案的优秀实践&#xff1b; 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对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…...

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver&#xff0c;是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢&#xff1f; 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…...

PiflowX如何快速开发flink程序

PiflowX如何快速开发flink程序 参考资料 Flink最锋利的武器&#xff1a;Flink SQL入门和实战 | 附完整实现代码-腾讯云开发者社区-腾讯云 (tencent.com) Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型&#xff0c;降低用户使用实时计算门槛而设计的一套符合标…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...