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 ...
随机推荐
- Single Shot Multibox Detection (SSD)实战(上)
Single Shot Multibox Detection (SSD)实战(上) 介绍了边界框.锚框.多尺度对象检测和数据集.现在,我们将利用这些背景知识构建一个目标检测模型:单次多盒检测(SSD) ...
- Samsung WLAN AP RCE漏洞及利用工具
1.漏洞详情: 三星 WLAN AP WEA453e 路由器 远程命令执行 2.fofa语句 title=="Samsung WLAN AP" 3.复现 payload: POST ...
- vue3.0 props
.orange { color: rgba(255, 165, 0, 1) } Vue3.0 props 1.你是否遇到了,引用props数据报错的问题? 在Vue3.0中,采用了proxy,让很多数 ...
- 「题解」agc031_e Snuke the Phantom Thief
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 AT4695.AtCoder agc031_e. 题意简述 在二维平面上,有 \(n\) 颗珠宝,第 \(i\) 颗 ...
- 『居善地』接口测试 — 13、Moco框架的使用
目录 1.Moco框架第一个练习 2.Get方法的Mock实现 3.Post方法的Mock实现 4.请求中加入Cookies 5.请求中加入Header 6.Moco模拟重定向 7.综合练习 8.总结 ...
- 【NX二次开发】Block UI 指定轴
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 【NX二次开发】Block UI对话框-代码生成部分
常规: 语言:生成的代码语言 生成附注:是否生成注释代码 生成特定与块的代码: 输入点: 回调:对话框通过回调函数调用,例如通过另一个对话框的按钮调用本对话框 菜单:对话框通过菜单调用 用户出口:对话 ...
- DDD实战课(实战篇)--学习笔记
目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...
- Project Reactor 响应式编程
目录 一. 什么是响应式编程? 二. Project Reactor介绍 三. Reactor核心概念 Flux 1. just() 2. fromArray(),fromIterable()和 fr ...
- ANDROID开发之GC_CONCURRENT freed
<GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause ...