2012-08-09 74 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