FileUtils.listFiles和IOFileFilter

时间:2013-10-21 17:10:05

标签: java apache-commons fileutils

您好我想以递归方式检查某个目录的文件和子文件夹是否包含某个字符串,所以尝试了这个

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 Menu \ Programs \ TECSYS \ iTopia Environments \ test_trunkcpsm   0

所以他找到了我正在搜索的文件,但仍然返回一个空列表,为什么会这样?而且,当我们在它的时候,第一个被接受的时候是什么时候?我很难理解这门课是如何运作的。

1 个答案:

答案 0 :(得分:3)

它对我有用,可能是false在第一个accept()中返回的原因。

您可能还想查看DelegateFileFilter以实现单个accept()

或者使用此单一呼叫进行工作:

Collection listF = FileUtils.listFiles(
    startPath, new WildcardFileFilter("*" + envName + "*"), TrueFileFilter.TRUE);