我知道啊,但具体怎么实现呢?
你看看我这段代码错在哪里?
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;
}
}
你看看我这段代码错在哪里?
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;
}
}
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,就可以了