过滤器优化文件搜索

使用过滤器编写实现类实现过滤

package com.itheima.Demo03.Filter;import java.io.File;/*练习:递归打印多级目录需求:只要.jpg结尾的文件我们可以使用过滤器来实现在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器1、File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器用来过滤文件(File)抽象方法:用来过滤文件的方法boolean accept(File pathname) 测试指定的抽象路径名是否应包含在路径名列表中。参数:File pathname:使用listFiles方法遍历目录,得到的每一个文件对象2、File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。java.io.FilenameFilter接口:实现此接口的类实例可用于过滤文件名作用:用于过滤文件名称抽象方法:用来过滤文件的方法boolean accept(File dir, String name) 测试指定文件是否应包含在文件列表中。参数:File dir:构造方法中传递的被遍历的目录String name:使用listFiles方法,遍历目录,获取的每一个文件/文件夹的名称注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则*/
public class Demo01Filter {public static void main(String[] args) {File f1 = new File("C:\\Users\\Ao\\Desktop\\lolhfds");getAllFile(f1);}/*定义一个方法,参数传递File类型的目录方法中对目录进行遍历*/private static void getAllFile(File f1) {File[] files = f1.listFiles(new FileFilterImpl());for (File f : files) {if (f.isFile()) {System.out.println(f);} else {//f是一个文件夹,则继续遍历这个文件夹//我们发现getAllFile()就是传递文件夹,遍历文件夹的方法//所以直接调用getAllFile()即可,递归getAllFile(f);}}}
}

FileFilterImpl.java

package com.itheima.Demo03.Filter;import java.io.File;
import java.io.FileFilter;/*创建过滤器FileFilter的实现类,重写过滤方法accept。定义过滤规则*/
public class FileFilterImpl implements FileFilter {@Overridepublic boolean accept(File pathname) {/*过滤规则:在accept方法中,判断File对象是否是以.jpg结尾是就返回true不是就返回false*/if (pathname.isDirectory()) {return true;}return pathname.getName().toLowerCase().endsWith(".jpg");}
}

FileFilter过滤器原理

使用匿名内部类实现过滤器(并使用lambda简化代码)

package com.itheima.Demo03.Filter;import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;/*练习:递归打印多级目录需求:只要.jpg结尾的文件我们可以使用过滤器来实现在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器1、File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器用来过滤文件(File)抽象方法:用来过滤文件的方法boolean accept(File pathname) 测试指定的抽象路径名是否应包含在路径名列表中。参数:File pathname:使用listFiles方法遍历目录,得到的每一个文件对象2、File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。java.io.FilenameFilter接口:实现此接口的类实例可用于过滤文件名作用:用于过滤文件名称抽象方法:用来过滤文件的方法boolean accept(File dir, String name) 测试指定文件是否应包含在文件列表中。参数:File dir:构造方法中传递的被遍历的目录String name:使用listFiles方法,遍历目录,获取的每一个文件/文件夹的名称注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则*/
public class Demo02Filter {public static void main(String[] args) {File f1 = new File("C:\\Users\\Ao\\Desktop\\lolhfds");getAllFile(f1);}/*定义一个方法,参数传递File类型的目录方法中对目录进行遍历*/private static void getAllFile(File f1) {/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//传递过滤器对象,使用匿名内部类File[] files = f1.listFiles(new FileFilter(){@Overridepublic boolean accept(File pathname) {if(pathname.isDirectory()){return true;}return pathname.getName().toLowerCase().endsWith(".jpg");}});*//*// lambda的改写  File[] files = dir.listFiles(f ‐>{return f.getName().endsWith(".java") || f.isDirectory();   });*///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//使用FilenameFilter/*File files[] = f1.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".jpg");}});!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*///使用lambda表达式,优化匿名内部类,接口中只有一个抽象方法File files[] = f1.listFiles((File d, String name) -> {return new File(d, name).isDirectory() || name.toLowerCase().endsWith(".jpg");});//优化//File files[] = f1.listFiles((d,name)-> new File(d,name).isDirectory()||name.toLowerCase().endsWith(".jpg"));for (File f : files) {if (f.isFile()) {System.out.println(f);} else {//f是一个文件夹,则继续遍历这个文件夹//我们发现getAllFile()就是传递文件夹,遍历文件夹的方法//所以直接调用getAllFile()即可,递归getAllFile(f);}}}
}

TestFileter.java

package com.itheima.Demo03.Filter;import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;public class TestFilter {public static void main(String[] args) {File f = new File("E:\\1.学习资料");printMl(f);}private static void printMl(File f) {System.out.println(f);/*File [] files = f.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return name.toLowerCase().endsWith(".flv")||new File(dir,name).isDirectory();}});*///File [] files = f.listFiles((d,n)->{return n.endsWith(".java")||new File(d,n).isDirectory();});/*private static void printMl(File f) {System.out.println(f);File [] files = f.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().toLowerCase().endsWith(".flv")||pathname.isDirectory();}});*/File[] files = f.listFiles(path -> {return path.getName().toLowerCase().endsWith(".flv") || path.isDirectory();});for (File file : files) {if (file.isFile()) {System.out.println(file);} else {printMl(file);}}}
}

09_0_3_过滤器相关推荐

  1. Redis 预防缓存穿透“神器” — 布隆过滤器

    1. 布隆过滤器 1.1 概念 在架构设计时有一种最常见的设计被称为布隆过滤器,它可以有效减少缓存穿透的情况.其主旨是采用一个很长的二进制数组,通过一系列的 Hash 函数来确定该数据是否存在. 布隆 ...

  2. SpringBoot2.3 修改响应头、添加更新token、解决在过滤器中修改失败

    前言 使用Spring Boot开发项目的过程中,难免会遇到向响应头中写入一些信息,例如更新了的token,用户详情等信息.在请求头中添加,请求时就可以通过过滤器,拦截器等验证或者获得请求头传递的信息 ...

  3. [JAVA EE] Filter过滤器

    Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...

  4. java 过滤器Filter

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  5. java 编码过滤器_Java编码过滤器

    Java编码过滤器: package com.utils; import javax.servlet.*; import javax.servlet.http.*; public class Enco ...

  6. android service intent-filter,如何在permission中加入intent-filter过滤器获取NotificationListenerService权限...

    现在要让我的app获取NotificationListenerService权限,我勾选了BIND_NOTIFICATION_LISTENER_SERVICE权限后,用native.js跳到ACTIO ...

  7. authc过滤器 shiro_shrio 权限管理filterChainDefinitions过滤器配置

    /** * Shiro-1.2.2内置的FilterChain * @see ============================================================= ...

  8. Filter(过滤器)

    一.Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作. 1.Filter快速入门 1.1.步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方 ...

  9. 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen

    算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...

最新文章

  1. opencv(4)图像滤波
  2. 20 个最常用的 Git 命令,码住!
  3. splitter 使用
  4. python中读取指定的行和列_Python怎么获取excle中指定行和列的值?
  5. 寻找 K8s 1.14 Release 里的“蚌中之珠”
  6. python画曲线图-如何使用python画曲线图
  7. visio 2007使用实例图文教程【转】
  8. 虚拟机VMware插入U盘操作系统崩溃死机的解决方法
  9. c是面向什么的语言,c语言是什么语言
  10. 学习Vue电商后台管理系统剩余功能模块的bug
  11. word如何设置页眉横线的磅数
  12. PIKA trouble02 -- (error) ERR Syntax error, try CLIENT (LIST [order by [addr|idle]| KILL ip:port)
  13. .net core发布到IIS上出现 HTTP 错误 500.19,错误代码:0x8007000d
  14. 口碑、银盒子相关功能是否支持问题
  15. C杂讲 字符串格式化 组包与解包
  16. Win7系统截图小工具
  17. vue实现v-chart绑定数据
  18. Linux中解压zip包的命令是什么?
  19. Python or html爱心代码(听说最近很火)
  20. 微信小程序快速创建wxml、js、json、wxss新文件

热门文章

  1. 道歉文章生成工具,让你一键向女友道歉!
  2. 高考最常见的高科技作弊和反作弊工具有哪些?
  3. 红米k30 android版本,红米K30至尊版VS红米K30Pro:入手Pro版其实没啥后悔的
  4. 基于Python的身份证校验及数据提取
  5. java selenium回车键_使用Python和Selenium输入Enter / Return键?
  6. IDEA中enter键换行
  7. 计算机的库的分类,计算机运行库的分类和简介
  8. JixiPix Artista Impresso for Mac(好用的油画滤镜工具)
  9. 数组转List的常用转换方式
  10. 《北京爱情故事》经典话语小节