今天偶然发现了这么好的代码,就放下手头上一切事情,将其整理保存了,哈哈哈哈。
这个不知道是不是Accept()方法后台执行的源代码,而且代码有一些错误,但它确实很好地解释了Accept()方法是怎么被执行的,希望有人能给个更好的
public String[] list(FilenameFilter filter) {
String names[] = this.list();//一般的将目录this下的文件名数组赋给names[]
if ((names == null) || (filter == null)) {//如果this为文件或者filer 为空,//则放回空
return names;
}
ArrayList v = new ArrayList();
// 没想到这里隐藏了这么个调用过程
for (int i = 0; i < names.length; i++) {
if (filter.accept(this, names[i])) {//传递this和一个文件名给filter的accept
v.add(names[i]);
}
}
return (String[]) (v.toArray(new String[0]));//将符合要求的数组返回
}
//下面这个例子使用FilenameFilter来实现对文件名的过滤
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
//如果File是一个文件,这里就返回空,如果File是个文件夹;则这个list方法返回这个文件夹下的符合FilenameFilter的文件;
// 这里this指的是File本身;
public class Test extends JFrame {
public static void main(String[] args) {
Frame parent = new Frame();
MyFilenameFilter filter = new MyFilenameFilter();
//FileDialog(Frame parent, String title)
//创建一个具有指定标题的文件对话框窗口,用于加载文件。
FileDialog dialog = new FileDialog(parent, "Choose File");
dialog.setFile("*.gif"); // void setFile(String file)将此文件对话框窗口的选定文件设置//为指定文件。
// void setFilenameFilter(FilenameFilter filter)
//将此文件对话框窗口的文件名过滤器设置为指定的过滤器。
dialog.setFilenameFilter(filter);
dialog.setVisible(true);
//String getFile()
// 获取此文件对话框的选定文件。
String selectedFile = dialog.getFile();
System.out.println(selectedFile);
if (selectedFile != null) {
System.exit(0);
}
}
}
class MyFilenameFilter implements FilenameFilter {
public boolean accept(File f, String name) {
StringTokenizer st = new StringTokenizer(name, ".");
String token = "";
while (st.hasMoreTokens()) {
token = st.nextToken();
}
if (token.equals("gif")) {
return true;
} else {
return false;
}
}
}
阅读(1700) | 评论(0) | 转发(0) |