2012-08-09 6 views
0

Apache FileUtils 및 IOFileFilter를 사용하여 .svn 폴더를 제외하고 재귀 적으로 폴더의 모든 파일을 나열했습니다. 여기에 내가 잘못 가고 어디IOFileFilter 사용 문제

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) 

사람이 말해 줄 수 오류를 얻고 난

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

을 시도 코드입니다. 사용 된 필터에 문제가 있다고 생각합니다. 나는 그것을 파악할 수 없었다.

답변

0

기능을 두 개의 기능으로 나눈 것처럼 보입니다.

두 번째도 isDirectory()을 확인해야하며 첫 번째도 이름을 확인해야합니다.

3

실제로 FileFilterUtils에는 사용할 수있는 makeSVNAware라는 메서드가 들어 있습니다. SVN 디렉토리를 무시하는 필터를 반환합니다. 때 listFiles가 두번째 인수로 파일 필터, 그 중 3 번째로 일세 필터를 기대하는

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

참고 : 예를 들면. 귀하의 코드에서 그들은 다른 방향입니다. 그러므로 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