package com.trs.bwl;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class DirList {
public static void main(String[] args) {
File path = new File("d:/");
String[] list;
list = path.list(new DirFilter(".*\\.txt"));
Arrays.sort(list);
for(int i = 0; i < list.length; i++) {
System.out.println(i + ": " + list[i]);
}
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String reg) {
pattern = Pattern.compile(reg);
}
public boolean accept(File dir, String name) {
return pattern.matcher(new File(name).getName()
).matches();
}
}
public interface FilenameFilter {
boolean accept(文件目录,
字串名);
}
它指出这种类型的所有对象都提供了一个名为accept()的方法。之所以要创建这样的一个类,背后的全部原因就是把accept()方法提供给
list()方法,使list()能够“回调”accept(),从而判断应将哪些文件名包括到列表中。因此,通常将这种技术称为“回调”,有时也称为
“算子”(也就是说,DirFilter是一个算子,因为它唯一的作用就是容纳一个方法)。由于list()采用一个FilenameFilter对象作
为自己的自变量使用,所以我们能传递实现了FilenameFilter的任何类的一个对象,用它决定(甚至在运行期)list()方法的行为方式。回调
的目的是在代码的行为上提供更大的灵活性
源代码:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[0]));
}
下面是使用FilenameFilter实现图片过滤,只要.gif,.jpg,.png文件
public class ImageFilter implements FilenameFilter{
public boolean isGif(String file) {
if (file.toLowerCase().endsWith(".gif")){
return true;
}else{
return false;
}
}
public boolean isJpg(String file){
if (file.toLowerCase().endsWith(".jpg")){
return true;
}else{
return false;
}
}
public boolean isPng(String file){
if (file.toLowerCase().endsWith(".png")){
return true;
}else{
return false;
}
}
public boolean accept(File dir,String fname){
return (isGif(fname) || isJpg(fname) || isPng(fname));
}
}
程序测试类:
public class ImageFilterTest{
public static void main(String[] args){
File directory=new File("E:\\program\\FilenameFilter\\images");
String[] images = directory.list(new ImageFilter());
System.out.println("size="+images.length);
for (int i = 0; i < images.length; i++){
String imgfile=images[i];
System.out.println("imgfile="+imgfile);
}
}
}
分享到:
相关推荐
该接口通常与`java.io.File`类中的`list(FilenameFilter filter)`和`listFiles(FilenameFilter filter)`方法结合使用,帮助开发者根据特定条件筛选出文件列表。 #### 二、FilenameFilter接口定义 FilenameFilter...
此外,`FilenameFilter`还可以与其他Java I/O类结合使用,例如`FileInputStream`或`FileOutputStream`,在读写文件时进行过滤。这样,你可以在打开文件之前就确保它们是符合条件的。 总结来说,`FilenameFilter`...
Java 中 File 类的使用方法 Java 中的 File 类是 java.io 包中的一员,它提供了对文件和文件夹的操作。下面是对 File 类的使用方法的详细讲解。 构造函数 File 类有多个构造函数,分别是: * `public File...
### Java File 类的方法详解 #### 一、简介 在Java编程语言中,`java.io.File`类是一个非常重要的类,它提供了对文件和目录路径名的抽象表示,并且支持一些基本的操作,例如创建、删除文件或目录等。本文将详细...
### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...
`FilenameFilter`接口:定义了一个方法`accept(File dir, String name)`,用于过滤目录中的文件或目录。可以配合`list()`和`listFiles()`方法使用,筛选出满足特定条件的文件。 8. **序列化与可序列化接口**: `...
`File`类还支持文件名过滤器,通过`list(FilenameFilter filter)`和`listFiles(FilenameFilter filter)`方法,可以筛选出满足特定条件的文件或目录。`FilenameFilter`是一个接口,实现该接口的对象可以定义一个`...
- `File[] listFiles(FilenameFilter filter)`:列出符合过滤条件的文件和目录,FilenameFilter接口用于自定义过滤规则。 **七、文件的相对路径与绝对路径** - `String getAbsolutePath()`:获取文件的绝对路径。 -...
在Java中,`File`类位于`java.io`包中,用于封装文件和目录路径名,并提供了与文件系统交互的方法。它是一个非常重要的类,用于获取文件的各种属性以及进行基本的文件管理操作,如创建、删除文件或目录等。 #### 二...
4.File[] listFiles(FilenameFilter filter) 获取根据文件名过滤后的文件对象 FilenameFilter:文件名过滤器接口 -----------------------------上面只能根据文件名或者文件夹名过滤,下面的...
在Java编程语言中,`File`类是学习基础IO操作的重要部分。`File`类位于`java.io`包中,它提供了对文件和目录的基本操作,如创建、删除、重命名以及获取文件属性等。本篇文章将深入探讨`File`类的主要功能和使用方法...
在学习过程中,可能会遇到的一个常见问题是文件或目录的权限问题,确保你有正确的访问权限来执行相应的文件操作。同时,注意文件的读写操作可能导致数据丢失,因此在实际操作前应备份重要数据。 以上就是关于`File`...
`listFiles()`还可以接收一个`FilenameFilter`或`FileFilter`来过滤结果。 8. **创建、删除目录**: `mkdir()`和`mkdirs()`用于创建单级或多级目录,`delete()`和`deleteRecursively()`(在Java 7及以上版本)用于...
在Java编程中,当我们需要与文件系统进行交互,如创建、读取、写入、删除文件或目录时,都会用到`File`类。本压缩包`javase-file.zip`可能包含了一系列关于`File`类的示例代码或教程文档,帮助我们深入理解如何在...
在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库支持多种数据类型的操作,包括文本文件、二进制文件等。...
虽然`File`类本身不提供读写文件的功能,但它可以与`FileInputStream`、`FileOutputStream`等流类配合,实现文件的读写操作。例如: ```java FileInputStream fis = new FileInputStream(file); ...
FilenameFilter的accept方法将被传递两个参数:File dir和String name。其中,File dir是指文件所在的目录,而String name是文件名。accept方法返回一个布尔值,表明文件是否满足过滤规则。 下面是一个简单的示例...
JavaSE基础知识笔记 JavaSE基础知识笔记(下)中主要讲解了Java中的I/O流和...小知识:File与FileOutputStream都一样,在指定相对路径时,如果 "./" 不写,默认就表示当前目录,即“./fos.dat”等价于“fos.dat”。
Java 文件过滤类 FileFilter 和 FilenameFilter Java 中的文件过滤类 FileFilter 和 FilenameFilter 是两个非常重要的接口,用于过滤文件和目录。它们广泛应用于文件管理、搜索、备份、数据分析等领域。 ...