自定义一个类,继承FileNameFilter类,获得某一目录下所有指定扩展名的文件。
方法一:
/** * 说明: * 自定义FilterByJava类,过滤指定扩展名的文件 * */ import java.io.File; import java.io.FilenameFilter; public class FilterByJava implements FilenameFilter{ private String ext; public FilterByJava(String ext) { this.ext = ext; } public boolean accept(File dir, String name) { // TODO Auto-generated method stub return name.endsWith(ext); } }
方法二:
FilenameFilter是一个接口,所以需要写一个实现类来实现该接口。我希望实现了该接口的类,可以过滤多种文件类型。示例代码如下:
package com.daxiang.filter; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class FileFilterTool implements FilenameFilter { List<String> types; protected FileFilterTool() { types = new ArrayList<String>(); } protected FileFilterTool(List<String> types) { super(); this.types = types; } public boolean accept(File dir, String filename) { // TODO Auto-generated method stub for (Iterator<String> iterator = types.iterator(); iterator.hasNext();) { String type = (String) iterator.next(); if (filename.endsWith(type)) { return true; } } return false; } /** * 添加指定类型的文件。 * * @param type 要添加的文件类型,如".jpg"。 */ public void addType(String type) { types.add(type); } }
在以上代码中,为FilenameFilter对象添加了一个成员变量types,以接收指定类型。方法addType(Stringtype)是为过滤器添加需要过滤的文件类型,其内容为文件的后缀名,如".jpg"。
public boolean accept(File dir, String filename)是实现FilenameFilter接口时要重写的方法,用循环迭代判断文件名的后缀名是否为types中的类型,是则返回true。当types中没有该文件的后缀名时,返回false。
在定义的类中,构造方法写了两个,一个是不带参数的,此时自己创建一个ArrayList对象,用以储存文件类型。另一个是带List对象参数的,该对象由用户创建。
使用时代码如下:
package com.daxiang.filter; import java.io.File; public class Test { public static void main(String args[]){ String path = "d:\\daxiang"; File file = new File(path); FileFilterTool filenameFilter = new FileFilterTool(); filenameFilter.addType(".jpg"); filenameFilter.addType(".mp3"); File[] files = file.listFiles(filenameFilter); for (int i = 0; i < files.length; i++) { System.out.println(files[i].getName()); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 05:57:07