嗨,我想递归地检查某个目录的文件和子文件夹是否包含特定的字符串,所以尝试了如下
package com.tecsys.sm.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
import com.tecsys.sm.util.WindowsDirectories;
public class ApacheListOfFiles {
public static void main(String[] args){
final String envName= "test_trunkcpsm";
WindowsDirectories wd = new WindowsDirectories();
File startPath = new File(wd.getStartMenuDir()+File.separator+"Programs");
Collection<File> listF = FileUtils.listFiles(startPath, new IOFileFilter() {
@Override
public boolean accept(File dir, String name) {
return false;
}
@Override
public boolean accept(File file) {
// TODO Auto-generated method stub
if(file.getName().contains(envName)){
System.out.println(file);
return true;
}else
return false;
}
},TrueFileFilter.INSTANCE);
System.out.println(listF.size());
Iterator<File> it = listF.iterator();
while(it.hasNext()){
System.out.println("Le fichier est : "+it.next());
}
}
}这方面的产出如下:
C:\ProgramData\Microsoft\Windows\Start菜单\Program\TECSYS\iTopia Environments\test_trunkcpsm 0
因此,他找到了我正在搜索的文件,但仍然返回一个空列表,为什么?同时,当我们在它的时候,第一个接受是什么时候被呼叫?我很难理解这门课是如何工作的。
发布于 2013-10-21 21:21:41
它对我有效,可能是因为false返回了第一个accept()。
您还可能希望查看DelegateFileFilter来实现单个accept()。
或者在工作中使用这个单一的调用:
Collection listF = FileUtils.listFiles(
startPath, new WildcardFileFilter("*" + envName + "*"), TrueFileFilter.TRUE);https://stackoverflow.com/questions/19500680
复制相似问题