注:运行环境 IDEA
package fileTest;
/**
* Created by peipei.zhou on 14-7-10.
* 条件:java中有一个FilenameFilter的接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法
*/
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class fileTest {
public static FilenameFilter filter(final String regex) {
// Creation of anonymous inner class:
return new FilenameFilter() {
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}; // End of anonymous inner class
}
public static void main(String[] args)
{
File dir = new File("d:/tmp/");
//方法一:
String[] files = dir.list(new MyFilenameFilter());//调用过滤器,自动调用accept()方法
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
System.out.println(files[i]);//仅仅输出.sh文件
}
}
//方法二:内部类实现过滤器
String[] files2 = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("sh");//或者name.indexOf(".sh")!=-1;
}
} );//调用过滤器,自动调用accept()方法
if (files2!=null)
{
for (int i = 0; i < files2.length; i++)
{
System.out.println(files2[i]);//仅仅输出.sh文件
}
}
//方法三:更通用的写法
//列出所有.java文件
String[] files3 = dir.list(new FileNameSelector("sh"));//调用过滤器,自动调用accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files3!=null)
{
for (int i = 0; i < files3.length; i++)
{
System.out.println(files3[i]);//仅仅输出.sh文件
}
}
//方法四:更通用的方法,注意与方法三中定义的过滤器的区别
try{
String[] files4 = dir.list(new DirFilter(".sh"));//调用过滤器,自动调用accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files4!=null)
{
for (int i = 0; i < files4.length; i++)
{
System.out.println(files4[i]);//仅仅输出.sh文件
}
}
}catch(Exception e){
e.printStackTrace();
}
//方法五:正则表达式
String[] files5 = dir.list(new DirFiles(".*[.sh]"));//调用过滤器,自动调用accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files5!=null)
{
for (int i = 0; i < files5.length; i++)
{
System.out.println(files5[i]);//仅仅输出.sh文件
}
}
//方法六:正则表达式+匿名类
String[] files6 = dir.list(filter(".*[.sh]"));//调用过滤器,自动调用accept()方法
if (files6!=null)
{
for (int i = 0; i < files6.length; i++)
{
System.out.println(files6[i]);//仅仅输出.sh文件
}
}
}
}
class MyFilenameFilter implements
FilenameFilter
{
public boolean accept(File dir,
String name)
{
//System.out.println(dir.getAbsolutePath());
// System.out.println(name);
return name.indexOf(".sh")!=-1;
}
}
class FileNameSelector implements
FilenameFilter
{
String extension = ".";
public FileNameSelector(String fileExtensionNoDot)
{
extension += fileExtensionNoDot;
}
@Override
public boolean accept(File dir,
String name)
{
return name.endsWith(extension);
}
}
class DirFilter implements
FilenameFilter{
private String type;
public DirFilter(String tp){
this.type=tp;
}
public boolean accept(File fl,
String path) {
File file=new File(path);
String filename=file.getName();
return filename.indexOf(type)!=-1;
}
}
class DirFiles implements
FilenameFilter{
private Pattern pattern;
public DirFiles(String regex)
{
pattern = Pattern.compile(regex);
}
public boolean accept(File dir,
String name)
{
return pattern.matcher(name).matches();
}
}