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 ...
随机推荐
- YOLOV4各个创新功能模块技术分析(一)
YOLOV4各个创新功能模块技术分析(一) 简 介 yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection arxiv:http ...
- TinyML设备设计的Arm内核
TinyML设备设计的Arm内核 Arm cores designed for TinyML devices Arm推出了两个新的IP核,旨在为终端设备.物联网设备和其低功耗.成本敏感的应用程序提供机 ...
- JUC 并发编程--04 常用的辅助类CountDownLatch , CyclicBarrier , Semaphore , 读写锁 , 阻塞队列,CompletableFuture(异步回调)
CountDownLatch 相当于一个减法计数器, 构造方法指定一个数字,比如6, 一个线程执行一次,这个数字减1, 当变为0 的时候, await()方法,才开始往下执行,, 看这个例子 Cycl ...
- IDEA骚技巧
1. var 声明 2. null 判空 3. notnull 判非空 4. nn 判非空 5. for 遍历 6. fori 带索引的遍历 7. not 取反 8. if 条件判断 9. cast ...
- springboot异常错误处理
1.在有模板引擎的情况下: springboot会默认找 templates/error/错误状态码.html,所以我们要定制化错误页面就可以到templates/error下创建一个[对应错误状态码 ...
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- 日常Bug排查-Nginx重复请求?
日常Bug排查-Nginx重复请求? 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,其中不乏一些看起来很低级但很容易犯的问题. 问题现场 有一天运维突然找到 ...
- 滑动窗口经典题 leetcode 3. 无重复字符的最长子串
题目 解题思路 题目要求找出给定字符串中不含有重复字符的最长子串的长度.这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答. 滑动窗口 具体操作如下图示:找到一个子串 s[left...right] ...
- Vue 利用后端的数据字典和Map对象实现表格列字段动态转义的处理方案
1.前言 Vue中,使用el-table组件,经常遇到列字段转义的问题.常规处理方法有以下两种: 方法1:在模板中使用v-if,直接转义.如: <el-table-column label= ...
- 关于使用Draw.io画数据库E-R图的说明
背景简介 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. diagrams.net是用于构建图表 ...