十万个为什莫之“关于接口的实现FilenameFilter接口”

ysfwan 2004-07-08 02:54:09
/*程序功能;过滤出当前目录下所有.java文件*/
import java.io.*;
public class FilterFileName{
public FilterFileName(){
String filter = new String(".java");
String[] list ;
File path = new File(".");
list = path.list(new FileFilter(filter));
for (int i = 0 ; i<list.length;i++)
System.out.println(list[i]);
}
public static void main(String[] parameters ){
FilterFileName f = new FilterFileName();
}
}
class FileFilter implements FilenameFilter {
String filterName ;
FileFilter(String filterName){this.filterName = filterName;}
public boolean accept(File dir,String name){
String f = new File(name).getName();
return f.indexOf(filterName) != -1;
}
}

本程序在jdk1.3.0_02下调试通过运行结果如下:
F:\java21天\STYJ2PRE2E\day17>javac FilterFileName.java

F:\java21天\STYJ2PRE2E\day17>java FilterFileName
AllCapsDemo.java
BufferDemo.java
capTempFile.java
FilterFileName.java
ReadBytes.java
ReadHex.java
ReadPrimes.java
ReadSource.java
TempFile.java
WriteBytes.java
WritePrimes.java
ZeroFile.java

请问:1.这里被实现的接口FilenameFilter中的accept方法是什莫时候被执行的?
2.以.java类型文件是在File类的list函数中被过滤的还是在实现了 FilenameFilter接口的 FileFilter类中实现的。
3.希望各位帮忙解释一下以上程序的执行过程。

小妹在此谢谢各位高手了。
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuepengfei 2004-07-08
  • 打赏
  • 举报
回复
楼上的解释很完全!看不懂机制的时候研究一下相应的源代码
yaray 2004-07-08
  • 打赏
  • 举报
回复
1. 在File.list(FilenameFilter filter)方法中被调用(可自己看File类的源码)

2.实现了 FilenameFilter接口的FileFilter类中的accept方法

3.看File类的list方法后,应该可以自己理解的.



FileFilter类中的accept方法有问题:
你在那个文件夹下建立形如 xxx.java.txt之类的文件(文件名包括.java,扩展名随意)试试? 看是否会被列出? 如果会被列出则要修改返回条件为: return f.endsWith(filterName); 而不是return f.indexOf(filterName) != -1;

62,623

社区成员

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

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