Duffblog

前进一步,看看,需要前进更大一步才可以。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  5 随笔 :: 53 文章 :: 5 评论 :: 0 Trackbacks
我想要读取某一个路径下,文件最后修改的时间大于我给定的所有的文件.
比如是E:\file
我想要等到一部分的file,即是文件最后修改的时间大于我给定的
我目前的做法是:
查看所有的File,一一比对,得到我想要的File
//read path
Vector needReadFile = new Vector();
Date fileDate = new Date();
File[] files = new File(readFilePath).listFiles();
if (files == null) {
continue;
}
for (int x = 0; x < files.length; x++) {
File tempFile = files[x];
Date fileDate = new Date(tempFile.
lastModified());
if (fileDate.compare(lastModifyDate) == 1 ) {
needReadFile.add(readFilePath + File.separator +
tempFile.getName());
}
} //end for(int i = 0 ; i< files.length ; i++)

虽然这样做是可以达到,当我的File很多的时候,效率很差了

效率好一点的方法:

看看listFiles()和listFiles(FileFilter filter) 的源代码

public File[] listFiles() {
String[] ss = list();
if (ss == null) return null;
int n = ss.length;
File[] fs = new File[n];
for (int i = 0; i < n; i++) {
fs[i] = new File(this.path, ss[i]);
}
return fs;
}

public File[] listFiles(FileFilter filter) {
String ss[] = list();
if (ss == null) return null;
ArrayList v = new ArrayList();
for (int i = 0 ; i < ss.length ; i++) {
File f = new File(this.path, ss[i]);
if ((filter == null) || filter.accept(f)) {
v.add(f);
}
}
return (File[])(v.toArray(new File[0]));
}

采用第二个方法以后,只需要遍历一遍,而且代码更清晰,
采用第一个方法,你取得列表以后还需要遍历一遍过滤掉不符合条件的.

File[] files = new File(readFilePath).listFiles(new FileFilter(){
public boolean accept(File pathname){
//.判断修改日期,符合条件返回true;否则false;

}});

这里采用匿名类,实现一个FileFilter,你要修改过滤的逻辑,只需要修改accept()方法就是了,当然,你也可以专门写一个类比如

class FileModifyDateFilter implements FileFilter{
private Date baseDate = null;
public FileModifyDateFilter(Date d) {
baseDate = d;
}

public boolean accept(File f) {
if (baseDate == null)
return true;
if (f.lastModified() > baseDate.getTime())
return true;

return false;
}
}


原文来自:http://www.jdon.com/jive/thread.jsp?forum=16&thread=22478&message=13169392
posted on 2006-04-04 21:17 追球者 阅读(824) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: