Java IO 之 FileFilter与FilenameFilter

FileFilter与FilenameFilter可以实现对文件的过滤,他们都是接口,具体的过滤规则需要我们自己编写

1、FileFilter

 1 package org.zln.io.file;
 2
 3 import java.io.File;
 4 import java.io.FileFilter;
 5
 6 /**
 7  * 拓展名过滤器 只返回指定拓展名的文件
 8  * Created by coolkid on 2015/6/21 0021.
 9  */
10 public class ExtensionFilter implements FileFilter{
11
12     //拓展名
13     private String extension;
14
15     public ExtensionFilter(String extension) {
16         this.extension = extension;
17     }
18
19     @Override
20     public boolean accept(File file) {
21         boolean result = false;
22
23         if (file.isDirectory()){//目录 过滤掉
24             result = false;
25         }else {
26             String fileName = file.getName();//文件名  不是全路径
27             int index = fileName.lastIndexOf(".");
28             if (index == -1){
29                 result = false;
30             }else if (index == fileName.length()-1){
31                 result = false;
32             }else {
33                 if (this.extension.equalsIgnoreCase(fileName.substring(index+1))){
34                     result = true;
35                 }
36             }
37         }
38         return result;
39     }
40 }

E:\GitHub\tools\JavaEEDevelop\Lesson1_JavaSe_Demo1\src\org\zln\io\file\ExtensionFilter.java

测试代码

1         File file = new File("E:\\GitHub\\tools");
2         File[] files = file.listFiles(new ExtensionFilter("bat"));
3         for (File file1:files){
4             System.out.println(file1.getAbsolutePath());
5         }

只有拓展名为 bat的文件才会被过滤出来,其他扩展名的文件以及文件夹不会被listFiles出来

在此时的逻辑上,我们是根据拓展名来过滤的,当然,如果实际需要,我们也可以根据文件的其他属性进行过滤



2、FilenameFilter

 1 package org.zln.io.file;
 2
 3 import java.io.File;
 4 import java.io.FilenameFilter;
 5
 6 /**
 7  * 图片过滤器
 8  * Created by coolkid on 2015/6/21 0021.
 9  */
10 public class ImageFilter implements FilenameFilter {
11
12     public boolean isGif(String filename){
13         if (filename.toLowerCase().endsWith(".gif")){
14             return true;
15         }else {
16             return false;
17         }
18     }
19
20     public boolean isJpg(String filename){
21         if (filename.toLowerCase().endsWith(".jpg")){
22             return true;
23         }else {
24             return false;
25         }
26     }
27
28     public boolean isPng(String filename){
29         if (filename.toLowerCase().endsWith(".png")){
30             return true;
31         }else {
32             return false;
33         }
34     }
35
36
37     @Override
38     public boolean accept(File dir, String name) {
39         System.out.println("DIR:"+dir.getAbsolutePath());
40         return isGif(name)||isJpg(name)||isPng(name);
41     }
42 }

E:\GitHub\tools\JavaEEDevelop\Lesson1_JavaSe_Demo1\src\org\zln\io\file\ImageFilter.java

通常使用 FilenameFilter 对文件进行过滤

时间: 2024-08-10 21:14:18

Java IO 之 FileFilter与FilenameFilter的相关文章

图解 Java IO : 二、FilenameFilter源码

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 从上一篇 图解 Java IO : 一.File源码 并没有把所有File的东西讲完.这次讲讲FilenameFilter,关于过滤器文件<Think In Java>中写道: 更具体地说,这是一个策略模式的例子,因为list()实现了基本功能,而按着形式提供了这个策略,完

java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io.File.listFiles(FilenameFilter filter)方法的声明: public File[] listFiles(FilenameFilter filter) 参数 filter - 文件名过滤器 返回值 该方法返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的

探究java.io之I/O类和接口

基于流的I/O系统被打包到java.io包中,本系列介绍那些自Java最初发布以来就已提供且广泛使用的部分.然而,从1.4版本开始,Java添加了另一套I/O系统,被称为NIO(也就是new I/O系统的缩写).NIO被打包到java.nio及其子包中..随着JDK7的发布,Java对NIO的功能进行了极大扩展,并且NIO的使用也在朝预期方向增长.NIO系统将在后面再讲. 下面列出了java.io定义的I/O类: BufferedInputStream                      

java ------ IO(从基础到加强)

IO基础到加强 基础篇 一.一些基础知识概念 1.文件的逻辑结构 流式文件 记录式文件 2.文件的存取方法 顺序存取 随机存取 3.文件的使用 操作接口 应用程序接口 4.流的定义和作用 流的定义.方向性和读/写操作 流采用缓冲区技术 流的作用:简单的说就是控制文件的输入和输出 5.流的存在 通过这个图,就可以很好的理解输入流和输出流,它们的命名是以程序为参展点,写进程序来,就是要用输入流,写出程序(写到文件中)就是要用输出流. 二.输入.输出流 主要分为两大类:字节流和字符流 1.字节流 (1

java.io 包

java.io 通过数据流.序列化和文件系统提供系统输入和输出. 请参见: 接口摘要 Closeable Closeable 是可以关闭的数据源或目标. DataInput DataInput 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构. DataOutput DataOutput 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流. Externalizable Externalizable 实例类的唯一特性是可以被写入序列化流中,

java io流 对文件操作

检查文件是否存在 获取文件路径 获取文件大小 ...... 更多参考手册 //对文件的操作 //检查文件是否存在 //获取文件路径 //获取文件大小 //文件是否可读 //文件是否可写 //.... import java.io.*; import java.util.*; public class Index{ public static void main(String[] args) throws Exception{ File wj = new File("D:/333.ape"

Java IO流中 File文件对象与Properties类

File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果文件存在,返回false booleanmkdir():创建目录,只能创建一级目录 booleanmkdirs():创建目录,可创建多级目录 删除 booleandelete():删除文件,如果文件不存在,返回false,如果删除的是目录,需要确保目录是空的 voiddeleteOnExit():程

Java IO流(第二讲):File类

File是基于磁盘操作的I/O,Java多数IO都是实行流式操作,但是File不是,它不会读取文件信息或者向文件存储,它是直接处理文件的,它不会读取文件信息或者向文件存储,File对象可以用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径.File类的名字比较欺骗性,它其实并不仅仅代表一个特定文件名字,也可以代表文件目录下一系列文件名,用File存储数据存在很大的安全性,但是文件仍是我们存储数据以及共享数据的主要工具. 下面我们来解读File类在Java中的运用方式. 首先,我们

java IO(一):File类

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h