使用apache commons fileutils排除特定的子目录

时间:2013-12-18 12:55:49

标签: java apache-commons

我想列出当前目录下的所有文件,但不包括子目录中的所有文件以及使用apache commons lib的子目录。

例如:如果我当前的目录是 - A,其子目录为B,C,D
B的子目录为b1,b2(b1以b12为子目录),C为c1,c2 ...... 现在我要列出C,c1,c2,D中的所有文件(不包括B,b1,b12,b2)

任何帮助都将受到高度赞赏!

2 个答案:

答案 0 :(得分:1)

使用org.apache.commons.io.FileFilter,有一个good example如何在JavaDoc中使用它。

例如,我有一个目录结构,如:

/tmp/testFilter/A
/tmp/testFilter/B
/tmp/testFilter/C/c1
/tmp/testFilter/C/c2
/tmp/testFilter/D/d1

然后我可以使用以下代码仅列出C和D下的文件:

public class FileLister {
    public static void main(String args[]) {
        File dir = new File("/tmp/testFilter");
        String[] files = dir.list(
            new NotFileFilter(
                new OrFileFilter(
                        new PrefixFileFilter("A"),
                        new PrefixFileFilter("B")
                )
            )
        );
        listFiles(dir, files);
    }

    private static void listFiles(File rootDir, String[] files) {
        for (String fileName: files) {
            File fileOrDir = new File(rootDir, fileName);
            if (fileOrDir.isDirectory()) {
                listFiles(fileOrDir, fileOrDir.list());
            } else {
                System.out.println(fileOrDir);
            }
        }
    }
}

答案 1 :(得分:1)

IOFileFilter fileFilter1 =   FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("A", null));
IOFileFilter fileFilter2 =   FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("B", null));
FileFilter fileFilter =   FileFilterUtils.and(fileFilter1, fileFilter2 );
List<File> files =  (List<File>)FileUtils.listFilesAndDirs(dir ,TrueFileFilter.INSTANCE ,(IOFileFilter)fileFilter );
 for (int i = 0; i < files.size(); i++) {
  System.out.println(files.get(i));
}