2013-12-18 40 views
1

我想列出當前目錄下的所有文件,但不包括子目錄內的所有文件,它是使用apache commons lib的子目錄。使用apache commons排除特定的子目錄fileutils

例如:如果我的當前目錄爲 - A及其子目錄作爲B,C,d
具有子目錄 乙如B1,B2(B1具有B12作爲其子目錄)和C具有C1,C2 .. 現在我想列出C,c1,c2,D(不包括B,b1,b12,b2)中的所有文件

任何幫助將不勝感激!

+0

看一看的使用'dirFilter'參數''FileUtils.listFiles()'方法:http://commons.apache.org/proper/commons-io/javadocs/api-1.4/org/apache/commons/io/FileUtils.html – eebbesen

回答

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); 
      } 
     } 
    } 
} 
+0

謝謝托馬斯你的幫助。 – br001

0
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)); 
}