我知道啊,但具体怎么实现呢?
你看看我这段代码错在哪里?
import java.io.*;
import java.awt.*;
public class DirFilter implements FilenameFilter
{
    private String prefix="",suffix="";            //文件名的前缀、后缀
    public DirFilter(String filterstr)
    {
        filterstr = filterstr.toLowerCase();
        int i = filterstr.indexOf('*');
        int j = filterstr.indexOf('.');
        if (i>0)
            prefix = filterstr.substring(0,i);
        if (j>0)
            suffix = filterstr.substring(j+1);
    }
    public static void main(String args[])
    {   
Frame f=new Frame("");
FilenameFilter filter = new DirFilter("*.txt");
FileDialog fdo=new FileDialog(f,"Open",FileDialog.LOAD);
fdo.setFilenameFilter(filter);
File f1=new File("");
File curdir=new File(f1.getAbsolutePath(),"");
String[] str=curdir.list(filter);
fdo.setVisible(true);
FileDialog fds=new FileDialog(f,"Save",FileDialog.SAVE);
fds.setFilenameFilter(filter);
fds.setVisible(true);
    }
    public boolean accept(File dir, String filename)
    {
        boolean yes = true;
        try
        {
            filename = filename.toLowerCase();
            yes = (filename.startsWith(prefix))&(filename.endsWith(suffix));
        }
        catch(NullPointerException e)
        {
        }
        return yes;
    }
}

解决方案 »

  1.   

    yes = (filename.startsWith(prefix))&(filename.endsWith(suffix));这一句错了而且写得有点问题
      

  2.   

    给一个RegExp的
    public class RegExpDirFilter implements FilenameFilter {
        private static final String BEGIN_EXP = "^";    private static final String END_EXP = "$";    private static final String DOT_EXP = "\\.";    private static final char OR_EXP = '|';    private static ArrayList SPECIAL_CHAR_KEY;    private static ArrayList SPECIAL_CHAR_REGX;    String regExp;    static {
            SPECIAL_CHAR_KEY = new ArrayList(3);
            SPECIAL_CHAR_REGX = new ArrayList(3);
            SPECIAL_CHAR_KEY.add("\\$");
            SPECIAL_CHAR_KEY.add("\\.");
            SPECIAL_CHAR_KEY.add("\\*");
            SPECIAL_CHAR_REGX.add("\\\\$");
            SPECIAL_CHAR_REGX.add("\\\\.");
            SPECIAL_CHAR_REGX.add("[a-zA-Z0-9_\\$]*");
        }    public RegExpDirFilter(String string) {
            regExp = encodeRegExp(string);
        }
        private String encodeRegExp(String string) {
            if (string == null) {
                return "";
            }
            int size = SPECIAL_CHAR_KEY.size();
            for (int i = 0; i < size; i++) {
                string = string.replaceAll(SPECIAL_CHAR_KEY.get(i).toString(),
                        SPECIAL_CHAR_REGX.get(i).toString());
            }
            return string;
        }    public boolean accept(File dir, String filename){
           return filename.matches(regExp);
        }
    }因为我们一般使用的DOS通配符不是RegExp,所以需要转成RegExp,然后对Filename match,就可以了