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);
}