FilenameFilter文件名过滤器——列出指定类型文件实现

  Java的IO操作中File有列出指定目录的文件的方法。如果要列出指定类型的文件,需使用FilenameFilter对象。

  FilenameFilter是一个接口,所以需要写一个实现类来实现该接口。我希望实现了该接口的类,可以过滤多种文件类型。代码示例如下:

/*
 * @(#)Mp3FileNameFilter.java		       version: 0.1 
 * Date:2011-8-17
 *
 * Copyright (c) 2011 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of 
 * the CFuture. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with CFuture.
 */
package cfuture09.utils;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Mp3FileNameFilter implements FilenameFilter {

	List<String> types;

	/**
	 * 构造一个Mp3FileNameFilter对象,其指定文件类型为空。
	 */
	protected Mp3FileNameFilter() {
		types = new ArrayList<String>();
	}

	/**
	 * 构造一个Mp3FileNameFilter对象,具有指定的文件类型。
	 * @param types
	 */
	protected Mp3FileNameFilter(List<String> types) {
		super();
		this.types = types;
	}

	@Override
	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  将添加的文件类型,如".mp3"。
	 */
	public void addType(String type) {
		types.add(type);
	}
}

 

  在以上代码中,我为FilenameFilter对象添加了一个成员变量types,以接收指定类型。方法addType(String type)是为过滤器添加需要过滤的文件类型,其内容为文件的后缀名,如".mp3"。

  public boolean accept(File dir, String filename)是实现FilenameFilter接口时要重写的方法,用循环迭代判断文件名的后缀名是否为types中的类型,是则返回true。当types中没有该文件的后缀名时,返回false。

  构造方法写了两个,一个是不带参数的,此时自己创建一个ArrayList对象,用以储存文件类型。另一个是带List对象参数的,该对象由用户创建。

 

   使用时代码如下:

		File file = new File(path);
		Mp3FileNameFilter filenameFilter = new Mp3FileNameFilter();
		filenameFilter.addType(".mp3");
		filenameFilter.addType(".wmv");
		File[] files = file.listFiles(filenameFilter);
		for (int i = 0; i < files.length; i++) {
			System.out.println(mp3Info);
		}


 

Java中的文件过滤器接口主要有两种:`FileFilter`和`FilenameFilter`。它们都可以用于过滤文件,让我们只获取需要的文件。 `FileFilter`过滤器接口定义了一个用于判断文件是否符合要求的方法`accept(File pathname)`,该方法返回一个布尔值,符合要求的文件返回`true`,否则返回`false`。下面是一个简单的实现示例: ```java import java.io.File; import java.io.FileFilter; public class MyFileFilter implements FileFilter { private String ext; public MyFileFilter(String ext) { this.ext = ext; } @Override public boolean accept(File file) { if (file.isFile() && file.getName().endsWith(ext)) { return true; } return false; } } ``` 上面的代码实现了一个过滤器,只保留指定扩展名的文件。使用方法如下: ```java public static void main(String[] args) { File dir = new File("C:/mydir"); FileFilter filter = new MyFileFilter(".txt"); File[] files = dir.listFiles(filter); for (File f : files) { System.out.println(f.getName()); } } ``` 上面的代码将输出`C:/mydir`目录下所有扩展名为`.txt`的文件名。 `FilenameFilter`过滤器接口也定义了一个用于判断文件是否符合要求的方法`accept(File dir, String name)`,该方法返回一个布尔值,符合要求的文件返回`true`,否则返回`false`。下面是一个简单的实现示例: ```java import java.io.File; import java.io.FilenameFilter; public class MyFilenameFilter implements FilenameFilter { private String ext; public MyFilenameFilter(String ext) { this.ext = ext; } @Override public boolean accept(File dir, String name) { if (name.endsWith(ext)) { return true; } return false; } } ``` 使用方法与`FileFilter`类似,只是需要把过滤器传递给`File`类的`list()`或`listFiles()`方法,如下所示: ```java public static void main(String[] args) { File dir = new File("C:/mydir"); FilenameFilter filter = new MyFilenameFilter(".txt"); String[] files = dir.list(filter); for (String name : files) { System.out.println(name); } } ``` 上面的代码将输出`C:/mydir`目录下所有扩展名为`.txt`的文件名
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值