File类与常用IO流第二章过滤器
在第一章中,有一个练习使用递归搜索文件
1 public static void main(String[] args) {
2 File f=new File("E:\\aaa");
3 method(f);
4 }
5
6 private static void method(File f) {
7 System.out.println(f.getAbsoluteFile());
8 File[] files = f.listFiles();
9 for (File file : files) {
10 if(file.isDirectory()){
11 method(file);
12 }else{
13 if(f.getName()..toLowerCase().endWith(".java")){
14 System.out.println(file);
15 }
16 }
17 }
18 }
可以使用过滤器来查找文件。
第二章、过滤器
- 在File类中有两个和ListFiles重载的方法,方法的参数就是过滤器
- File[] listFiles(FileFilter filter):
- java.io.fileFilter接口:用于抽象路径名(File对象)的过滤器
- 作用:用来过滤文件(File对象)【接口中只有一个方法】
- 抽象方法:用来过滤文件的方法
- boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中。
参数:
- File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
- 抽象方法:用来过滤文件的方法
- File[] listFiles(FilenameFilter filter):
- java.io.FilenameFilter接口:实现此类的实例可以用于每一个过滤文件名。
- 作用:用来过滤文件名称
- 抽象方法:用来过滤文件的方法
- boolean accept(File dir,String name):测试指定文件是否应该包含在某一个文件列表中。
参数:
File dir:构造方法中传递的被遍历的目录
String name: 使用listFiles方法遍历目录,得到的每一个文件/文件夹的名称
- java.io.FilenameFilter接口:实现此类的实例可以用于每一个过滤文件名。
- 注意:两个过滤器接口都是没有实现类的,需要我们自己重写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则。
- 自定义规则为return true
1 //1.创建FileFilter 接口的实现类,重写accept 方法,自定义过滤规则
2 import java.io.File;
3 import java.io.FileFilter;
4
5 public class FileFilterImpl implements FileFilter {
6 @Override
7 public boolean accept(File pathname) {
8 return true;
9 }
10 }
11
12 public static void main(String[] args) {
13 File f=new File("E:\\aaa");
14 method(f);
15 }
16
17 private static void method(File f) {
18 System.out.println(f.getAbsoluteFile());
19 File[] files = f.listFiles(new FileFilterImpl());//2.传递过滤器对象
20 for (File file : files) {
21 if(file.isDirectory()){
22 method(file);
23 }else{
24 System.out.println(file);
25 }
26 }
27 } - 但是结果并没有完成过滤
- 自定义规则为return true
- 需要明确FileFilter的原理以及如何使用
1 public class FileFilterImpl implements FileFilter {
2 @Override
3 public boolean accept(File pathname) {
4 return pathname.getName().toLowerCase().endsWith(".java");
5 }
6 }
运行结果,将文件夹也过滤掉了,文件夹里面的.java文件也一起遗漏了。改为:
1 public class FileFilterImpl implements FileFilter {
2 @Override
3 public boolean accept(File pathname) {
4 //如果pathname是一个文件夹,返回true,继续遍历这个文件
5 if(pathname.isDirectory()){
6 return true;
7 }
8 return pathname.getName().toLowerCase().endsWith(".java");
9 }
10 }
运行结果是想要的。优化为匿名内部类:
1 private static void method(File f) {
2 System.out.println(f.getAbsoluteFile());
3 File[] files = f.listFiles(new FileFilter() {
4 @Override
5 public boolean accept(File pathname) {
6 if(pathname.isDirectory()){
7 return true;
8 }
9 return pathname.getName().toLowerCase().endsWith(".java");
10 }
11 });
12 for (File file : files) {
13 if(file.isDirectory()){
14 method(file);
15 }else{
16 System.out.println(file);
17 }
18 }
19 }
File[] files1=f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});
//使用Lambda 表达式
File[] files3=f.listFiles(pathname->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));
//使用Lambda表达式
File[] files2=f.listFiles((dir,name)->new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java"));
File类与常用IO流第二章过滤器的更多相关文章
- File类与常用IO流第一章File类
第一章:File类 一.1个重点单词: file:文件:directory:文件夹/目录:path:路径(绝对路径:absolutePath) 二.4个静态成员变量: 1.static String ...
- File类与常用IO流第九章——转换流
第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...
- File类与常用IO流第四章——IO字节流
一切文件在存储时,都是以二进制数字的形式保存的,都是一个一个字节.无论使用什么样的流对象,底层传输的始终是二进制数据. 字节输出流 OutputStream java.io.OutputStream ...
- File类与常用IO流第七章——Properties集合
Properties概述 java.util.Properties extends Hashtable<k,v> implements Map<k,v> Properties类 ...
- File类与常用IO流第三章IO流概述
一:以内存为基准,按照数据的流动方向,流向内存为输入(读取数据),流出内存为输出.IO流有四大顶级父类: IO流四大顶级父类 输入流 输出流 字节流 字节输入流 InputStream 字节输出流 ...
- File类与常用IO流第八章——缓冲流
第八章.缓冲流 缓冲流概述 缓冲流,也叫高效流,是对4个基本的FileXxx流的增强.按照数据类型分为4类: 输入缓冲流 输出缓冲流 字节缓冲流 BufferedInputStream Buffe ...
- File类与常用IO流第十一章——打印流
第十一章.打印流 概述:java.io.PrintStream extends OutputStream,为其他输出流添加了功能,使题目能够方便的打印各种数据值表示形式. 特点: 只负责数据的输出,不 ...
- File类与常用IO流第五章——IO字符流
字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...
- File类与常用IO流第六章——使用try...catch...finally处理流中的异常
在JDK1.7之前: 1 package com.itheima.demo06.trycatch; 2 3 import java.io.FileWriter; 4 import java.io.IO ...
随机推荐
- Python脚本语言写法
Python脚本语言写法 脚本语言的开始行,是指文件中的代码用什么可执行程序去运行它,就这么简单. #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的pyth ...
- TensorFlow单层感知机实现
TensorFlow单层感知机实现 简单感知机是一个单层神经网络.它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,只能解决线性可分的问题.虽然限制了单层感知机只能应用于线性可分 ...
- CUDA运行时 Runtime(四)
CUDA运行时 Runtime(四) 一. 图 图为CUDA中的工作提交提供了一种新的模型.图是一系列操作,如内核启动,由依赖项连接,依赖项与执行分开定义.这允许定义一次图形,然后重复启动.将 ...
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- JUC 并发编程--11, AQS源码原理解析, ReentrantLock 源码解读
这里引用别人博客,不重复造轮子 https://blog.csdn.net/u012881584/article/details/105886486 https://www.cnblogs.com/w ...
- Java基础知识之this关键字知识讲解
this关键字这里对java中this关键字的基础知识进行讲解,希望对热爱java的小伙伴有帮助!! /* this关键字代表了所属函数的调用者对象. this关键字的作用: 1. 如果存在同名成员变 ...
- Zabbix 4.0 使用笔记
自定义监控项1.确认需监控内容 (例如:登陆用户数)2.确认监控方法(例如:脚本)3.编写脚本 vi /etc/zabbix/custom_shell/current_login_user.sh# w ...
- 管中窥豹-ssh链接过多的问题分析及复盘
缘起 某一天,产品侧同事联系过来,反馈话单传输程序报错,现象如下: 实际上,该节点仅提供了一个sftp服务,供产品侧传输话单过来进行临时存储,由计费部门取走而已. 分析 于是找运维同事上服务器看了下情 ...
- js笔记18
1.面向对象 (1)单例模式 (2)工厂模式 (3)构造函数 a.类 js天生自带的类 基类 object 子类 Function Array Number Math Boolean ...
- CRM系统不仅给企业带来更多收益而且提升销售效率
将客户信息记录在CRM系统的数据库中,同时共享沟通数据给售前.售后.SDR等上下游,客户资源还能够按照分配规则分配给适合的销售人员,帮助更快成单.全面使用CRM系统会给企业带来更多业绩. 1.全方位客 ...