package code.tong;import java.io.*;class FileFilterDemo implements FilenameFilter {
private String name;
private String ext;
public FileFilterDemo(String name,String ext){
this.name=name;
this.ext=ext;
}

public boolean accept(File dir,String filename){
boolean fString =true;
if(name!=null)
fString &=filename.startsWith(name);

if(ext!=null)
fString &=filename.endsWith("."+ext);
return fString;
}
}
public class JavaDirDemo {
static void print(String s){
System.out.println(s);
}
   
public static void main(String [] args){
File path=new  File("C:/Program Files/360safe");
print("文件路径"+path);
FilenameFilter x=new FileFilterDemo("lib","exe");

String s[] =path.list(x);
for(int i=0;i<s.length;i++)
print(s[i]);
}
}//运行结果:文件路径C:\Program Files\360safe ,怎么没有显示我要过滤的文件名呢?程序哪里出错了呢
// 路径绝对没有问题,我换了几个路径,没有list(),
// 还有一个疑问,“&=”什么意思啊。
// 接口中的方法public boolean accept(File dir,String filename),怎么没有对象调用呢?

解决方案 »

  1.   

    package a.test;import java.io.File;
    import java.io.FilenameFilter;/*
     * FilenameFilter是一个接口,只有一个方法要实现:
     * accept(File dir, String name)
     * 
     * 我们这里实现了一个名字过滤器
     */
    public class Filter implements FilenameFilter
    { static String kzm = ".exe"; public boolean accept(File dir, String name)
    {
    return name.endsWith(kzm);
    } public String[] getFile(File file, String name)
    {
    this.setKzm(name);
    String[] filename = file.list(this);
    return filename;
    } public void setKzm(String name)
    {
    kzm = name;
    } public static void main(String[] args)
    {
    Filter s = new Filter();
    File file = new File("D:/Program Files/360safe");
    String[] filename = s.getFile(file, kzm);
    for (int i = 0; i < filename.length; i++)
    {
    System.out.println(filename[i]);
    }
    }}实现查找  D:/Program Files/360safe  文件夹下的所有以.exe结尾的文件