java文件过滤器
2021/7/10 22:06:28
本文主要是介绍java文件过滤器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
练习:递归打印多级目录:
package com.itheima.demo01.Recursion; import java.io.File; public class Demo03Recursion { public static void main(String[] args) { File file = new File("C:\\Users\\大 大\\Desktop\\aaa"); getAllFile(file); } //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历 public static void getAllFile(File dir) { //打印便利的目录名称 System.out.println(dir); File[] files = dir.listFiles(); for (File f : files) { //对遍历得到的File对象f进行判断,判断是否是文件夹 if(f.isDirectory()){ getAllFile(f); }else { //f是一个文件,直接打印即可 System.out.println(f); } } } }
综合案例:文件搜索
搜索D:\aaa
目录中的.java
文件。
分析:
- 目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录。
- 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。
package com.itheima.demo01.Recursion; import java.io.File; /* * 打印多级目录下的后缀名以.java结尾得文件*/ public class Demo04Recursion { public static void main(String[] args) { File file = new File("C:\\Users\\大 大\\Desktop\\aaa"); getAllFile(file); } //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历 public static void getAllFile(File dir) { //打印便利的目录名称 //System.out.println(dir); File[] files = dir.listFiles(); for (File f : files) { //对遍历得到的File对象f进行判断,判断是否是文件夹 if(f.isDirectory()){ getAllFile(f); }else { //f是一个文件,直接打印即可 //需要将File对象f转为字符串对象 //1. //String name = f.getName(); //2. //String path = f.getPath(); //3. String s = f.toString(); //toString()方法里面调用的其实就是getPath //将字符串变成小写的 s = s.toLowerCase(); //判断字符串是不是以.java结尾,注意返回的是布尔型 boolean b = s.endsWith(".java"); if (b){ System.out.println(f); } //链式编程 if (f.getName().toString().toLowerCase().endsWith(".java")){ System.out.println(f); } } } } }
文件过滤器
java.io.FileFilter
是一个接口,是File对象的过滤器。
该接口的对象可以传递给File类的listFiles(FileFilter)
作为参数, 接口中只有一个方法。
File[ ] ListFiles(FileFilter filter) `boolean accept(File pathname) ` :测试pathname是否应该包含在当前File目录中,符合则返回true。 参数:File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
File[ ] ListFiles(FilenameFilter filter)
作用:用于过滤文件名称
boolean accept(File dir,String pathname)
:测试指定文件是否应该包含在某一个文件中参数:
File dir:构造方法中传递的被遍历的目录
String name :使用ListFiles方法遍历目录,获取的每一个文件/文件 夹的名称
注意:
两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept ,在方法中自己定义过滤的规则
FileFilter过滤器原理:
过滤器实现文件过滤
实现类:
package com.itheima.demo01.Recursion; import java.io.File; import java.io.FileFilter; /* * 重写accept方法,定义过滤规则*/ public class FileFilterImpl implements FileFilter { @Override public boolean accept(File pathname) { //如果传过来的是目录,不能过滤掉,需要返回true,继续调用方法 if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
主函数
package com.itheima.demo01.Recursion; import java.io.File; public class Demo05FileFilter { public static void main(String[] args) { File file = new File("C:\\Users\\大 大\\Desktop\\aaa"); getAllFile(file); } //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历 public static void getAllFile(File dir) { //传递过滤器对象 File[] files = dir.listFiles(new FileFilterImpl()); for (File f : files) { //对遍历得到的File对象f进行判断,判断是否是文件夹 if(f.isDirectory()){ getAllFile(f); }else { //f是一个文件,直接打印即可 System.out.println(f); } } } }
使用匿名内部类和lambda表达式优化程序
package com.itheima.demo01.Recursion; import java.io.File; import java.io.FileFilter; public class Demo06FileFilter { public static void main(String[] args) { File file = new File("C:\\Users\\大 大\\Desktop\\aaa"); getAllFile(file); } //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历 public static void getAllFile(File dir) { //传递过滤器对象,使用匿名内部类 /*File[] files = dir.listFiles(new FileFilter(){ @Override public boolean accept(File pathname) { //如果传过来的是目录,不能过滤掉,需要返回true,继续调用方法 if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".java"); } });*/ //使用lambda表达式(接口中只有一个抽象方法) //当方法体只有一句时,可以把大括号,return,return语句后的分号省略! File[] files = dir.listFiles((pathname)-> //如果传过来的是目录,不能过滤掉,需要返回true,继续调用方法 pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java") ); for (File f : files) { //对遍历得到的File对象f进行判断,判断是否是文件夹 if(f.isDirectory()){ getAllFile(f); }else { //f是一个文件,直接打印即可 System.out.println(f); } } } }
这篇关于java文件过滤器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?