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 ... 
随机推荐
- AI推理单元
			AI推理单元 推理服务供了一套面向 MLU(Machine Learning Unit,机器学习单元)设备的类似服务器的推理接口(C++11标准),以及模型加载与管理,推理任务调度等功能,极大地简化了 ... 
- 怎样训练YOLOv3
			怎样训练YOLOv3 Training YOLOv3 : Deep Learning based Custom Object Detector 本文将在一些公开的雪人图片和视频上分享训练过程.有助于训 ... 
- Docker Context基本原理
			Docker Context基本原理 介绍 本指南介绍了上下文如何使单个Docker CLI轻松管理多个Swarm集群.多个Kubernetes集群和多个单独的Docker节点. 单个Docker C ... 
- 短波红外(SWIR)相机camera
			短波红外(SWIR)相机camera AVs Can't Drive Everywhere. Can TriEye's SWIR Camera Help? TriEye的短波红外(SWIR)摄像机能否 ... 
- kali2020.4安装openvas(gvm)
			记录一下,方便复习 1.更换kali源,默认源注释掉. sudo vim /etc/apt/sources.list 中科大 deb http://mirrors.ustc.edu.cn/kali k ... 
- 【NX二次开发】指定矢量控件,记住上次选择的方向
			block UI控件如果有RetainValue属性,就用这个属性.没有这个属性可以参考下面这种方法.以矢量控件为例: 1.在apply_cb回调中,将控件值保存到文本中 double TopForT ... 
- 【NX二次开发】打开信息窗口UF_UI_open_listing_window
			头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ... 
- anaconda安装VSCODE后,python报错
			重新用anaconda时遇到了一点问题. 测试anaconda捆绑安装的VSCODE时写了一行print(1),然后报错. 后来发现用anaconda下载vscdoe时并不会给python一个路径,这 ... 
- 记一次项目中解决 -- 并发减库存超卖问题过程(Java)
			起因:项目中要做预约功能,首先每天的余票都是有上限的,自然不能出现超卖的情况 基于我们项目是单体分布式的springcloud部署,我想了下 第一种方法,直接mysql加行锁,要update这条库存数 ... 
- HDFS 07 - HDFS 性能调优之 合并小文件
			目录 1 - 为什么要合并小文件 2 - 合并本地的小文件,上传到 HDFS 3 - 合并 HDFS 的小文件,下载到本地 4 - 通过 Java API 实现文件合并和上传 版权声明 1 - 为什么 ... 
