免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1405 | 回复: 0
打印 上一主题 下一主题

FilenameFilter的抽象方法如何被执行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-14 20:26 |只看该作者 |倒序浏览
   今天偶然发现了这么好的代码,就放下手头上一切事情,将其整理保存了,哈哈哈哈。
这个不知道是不是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
            if (filter.accept(this, names)) {//传递this和一个文件名给filter的accept
                v.add(names);
            }
        }
        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;
        }
    }
}     



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87164/showart_1720326.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP