怎样设置打开文件对话框的过滤器

whlx 2004-04-30 10:37:40
怎样设置打开文件对话框的过滤器,只显示*.txt文件
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
raimundo 2004-05-12
  • 打赏
  • 举报
回复
给一个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,就可以了
raimundo 2004-05-12
  • 打赏
  • 举报
回复
yes = (filename.startsWith(prefix))&(filename.endsWith(suffix));

这一句错了

而且写得有点问题
whlx 2004-05-03
  • 打赏
  • 举报
回复
怎么没人会啊
an7coding 2004-05-01
  • 打赏
  • 举报
回复
帮盯
whlx 2004-04-30
  • 打赏
  • 举报
回复
我知道啊,但具体怎么实现呢?
你看看我这段代码错在哪里?
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;
}
}
pink12345 2004-04-30
  • 打赏
  • 举报
回复
只要重载过滤器的抽象类中的方法

然后修改它,变成你想要的

然后在打开文件对话框里面设置一下过滤器就可以了

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧