2012-08-09 38 views
0

我已经使用Apache FileUtils和IOFileFilter列出递归排除.svn文件夹下的文件夹下的所有文件。这里是我试过使用IOFileFilter问题

File selectedFolder = new File(path);\\path to folder to list 
     final IOFileFilter dirs = new IOFileFilter() { 
      @Override 
      public boolean accept(File file, String s) { 
       return file.isDirectory(); 
      } 

      @Override 
      public boolean accept(File file) { 
       // TODO Auto-generated method stub 
       if(file.getName().toLowerCase().equalsIgnoreCase(".svn")||file.getName().toLowerCase().contains(".svn")) 

       return false; 
       else return true; 
      } 



     }; 
     filesList.addAll(FileUtils.listFiles(selectedFolder,dirs, TrueFileFilter.INSTANCE)); 

代码我收到错误

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory 
    at org.apache.commons.io.FileUtils.validateListFilesParameters(FileUtils.java:545) 
    at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:521) 

谁能告诉我,我要去错在何处。我觉得使用的过滤器有问题。我无法弄清楚它

回答

0

看起来你已经将功能分成两个功能。

第二个也应该检查isDirectory()第一个也应该检查名称。

3

实际上,FileFilterUtils包含一个名为makeSVNAware的方法,您可以使用它。它会返回一个忽略SVN目录的过滤器。例如:

filesList.addAll(
    FileUtils.listFiles(selectedFolder, TrueFileFilter.TRUE, 
      FileFilterUtils.makeSVNAware(null))); 

注意listFiles需要一个文件过滤器作为其第二个参数,和DIR滤波器作为第3。在你的代码中,它们是相反的。所以如果你不想使用makeSVNAware,你的代码看起来像这样:

File selectedFolder = new File(path); // path to folder to list 

final IOFileFilter dirs = new IOFileFilter() { 
    @Override 
    public boolean accept(File file, String s) { 
     return file.isDirectory(); 
    } 

    @Override 
    public boolean accept(File file) { 
     return (!file.getName().toLowerCase().equalsIgnoreCase(".svn")); 
    } 

}; 
// 2nd argument: TRUE filter, returning all files 
// 3rd argument: dirs filter, returning all directories except those named .svn 
filesList.addAll(FileUtils.listFiles(selectedFolder, TrueFileFilter.TRUE, dirs)); 
+0

@dannyi认为这是我出错的地方。如果有任何问题,我会尝试此操作并发帖 – VamsiKrishna 2012-08-10 01:49:45