这是thinking java 一书中的一个例子,有点疑惑,请帮忙:
//:DirList.java
//Displays directory listing using regular expressions.
//{Args:"d.*\.java"}
import java.io.*;
import java.util.*;
import java.util.regex.*;public class DirList{
public static void main(String[] args){
File path=new File(".");
String[] list;
if(args.length==0)
list=path.list();
else
//文件过滤,public String[] list(FilenameFilter filter)
list=path.list(new DirFilter(args[0]));
for(int i=0;i<list.length;i++)
System.out.println(list[i]);
}
}//DirFilter类实现FilenameFilter接口
class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern=Pattern.compile(regex);
}
//此借口唯一要实现的方法是accept,但是不知道是何时调用的,是否是自动调用的?
public boolean accept(File dir,String name){
//Strip path information,search for regex:
//我发现下面的返回语句中的参数name好像没有传递,是怎么实现的?
//我猜想accept方法根本就没有实现,因为我将下面的注释掉,用return true;代替,结果一样
return pattern.matcher(new File(name).getName()).matches();
}
}最近刚结束java的io流的学习,发现很复杂,不知道怎么才能更好地掌握,以上疑问望解答!同时各位高人如果有这方面的学习建议,请执教:怎样才能学好java.io?
//:DirList.java
//Displays directory listing using regular expressions.
//{Args:"d.*\.java"}
import java.io.*;
import java.util.*;
import java.util.regex.*;public class DirList{
public static void main(String[] args){
File path=new File(".");
String[] list;
if(args.length==0)
list=path.list();
else
//文件过滤,public String[] list(FilenameFilter filter)
list=path.list(new DirFilter(args[0]));
for(int i=0;i<list.length;i++)
System.out.println(list[i]);
}
}//DirFilter类实现FilenameFilter接口
class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern=Pattern.compile(regex);
}
//此借口唯一要实现的方法是accept,但是不知道是何时调用的,是否是自动调用的?
public boolean accept(File dir,String name){
//Strip path information,search for regex:
//我发现下面的返回语句中的参数name好像没有传递,是怎么实现的?
//我猜想accept方法根本就没有实现,因为我将下面的注释掉,用return true;代替,结果一样
return pattern.matcher(new File(name).getName()).matches();
}
}最近刚结束java的io流的学习,发现很复杂,不知道怎么才能更好地掌握,以上疑问望解答!同时各位高人如果有这方面的学习建议,请执教:怎样才能学好java.io?
解决方案 »
- SWT Transform图像旋转
- 关于用Registry.jar操作windows注册表的问题,大家来帮我接触这个疑惑吧!!
- maven 数据库管理!!!!
- 各位仁兄有没有能讲清楚Collection、Collections、Map、List、也就是util包里面这些东西的资料?我看了好多书,花了好找时间反而是越看越
- 数据库打包
- 如何在局域网中发邮件?详见内!
- About JTable - 两段相同的代码为何结果不同?
- 哪有jtree的资料?
- 初级问题,请大家指教!
- 哪儿有websphere的电子书
- 高手才进来,ServerSocket传送字节丢失的问题
- 这个问题超级狂燥!学习JAVA都会遇到的问题!大家来看看哦!
public boolean accept(File dir,String name){
这个方法是自动调用的
你在执行查找的时候就已经是调用这个方法了 //我发现下面的返回语句中的参数name好像没有传递,是怎么实现的?
//我猜想accept方法根本就没有实现,因为我将下面的注释掉,用return true;代替,结果一样
return pattern.matcher(new File(name).getName()).matches();
你可以试试啊,在这句话之前打印一个日志
或者直接用
System.out.println("excute ");
运行程序看有没有这句话
个人认为,或许你的regex使用的不对
list=path.list(new DirFilter(args[0]));
list()方法是重载的,可以不接受参数,也可以接受一个FilenameFilter型参数,因为DirFilter实现了FilenameFilter接口,所以它的实例可以作为list()方法的参数,这时它的accept()方法就被调用了。
return pattern.matcher(new File(name).getName()).matches();
中的name参数是怎么传递的呢
具体一点,这个方法是怎么实现的,我有点儿糊涂,请再赐教!
return pattern.matcher(new File(name).getName()).matches();
中的name参数是怎么传递的呢
具体一点,这个方法是怎么实现的,我有点儿糊涂,请再赐教!
-----------------------------------------------------------------------------------accept()方法是给File实例的list()方法调用的,参数自然也应该由list()方法来传递。要了解这个你应该去看File类的源码。另外,我认为楼主没有完全搞清楚这个例子的用意。在这个例子中,只有指定了一个命令行参数,才会使用DirFilter,否则就是列出全部文件。
先大体介绍一下这个类的功能,从一个文件名包含日期的文件夹里过滤出包含特定日期的File[];
package zgqx;import java.io.File;
import java.util.*;
import java.io.FilenameFilter;public class GetFile implements FilenameFilter{
private int total;
public GetFile(int i){
total = i;
}
public List isFavor(){
Date date = new Date();
Calendar c = Calendar.getInstance();
int day = 0;
List list = new ArrayList();
String s="",year="";
for(int a=1;a<=total;a++){
c.setTime(new Date(date.getTime()-a*86400000l));
day = c.get(Calendar.DAY_OF_YEAR);
year = Integer.toString(c.get(Calendar.YEAR));
if(day<100){
s=""+year.substring(2)+"0"+day;
}else{
s=""+year.substring(2)+day;
}
list.add(s);
}
return list;
}
public boolean accept(File dir,String fname){
boolean b =false;
for(int i=0;i<isFavor().size();i++){
if(fname.indexOf((String)isFavor().get(i))!=-1){
b=true;
break;
}
}
return b;
}
public static void main(String a[]){
File dir = new File("e:\\temp");
File [] re = dir.listFiles(new GetFile(3));
for(int i=0;i<re.length;i++){
System.out.println(re[i].getName());
}
System.out.println(re.length);
System.out.println(new GetFile(3).isFavor().get(0));
}
}