2017-12-01 17 views
0

이것은 내 FilenameFilter이며 .docx으로 끝나는 디렉토리와 파일 만 허용해야합니다. 그러나 어떤 이유로 모든 파일이 어떤 종결 또는 디렉토리인지 여부에 상관없이 모든 파일을 허용합니다. 일단 || dir.isDirectory()을 제거하면 예상대로 작동합니다.Filename Filters 불확실한 결과를내는 필터

new FilenameFilter() { 

    @Override 
    public boolean accept(File dir, String name) { 
     if (name.toLowerCase().endsWith(".docx") || dir.isDirectory()) { 
      return true; 
     } 
     return false; 
    } 
}) 

내가 뭘 잘못하고 모든 파일을 허용합니까?

+0

'가 " .docx "또는'dir'은 디렉토리입니다 – Ronald

답변

3

dir은 항상 단순한 디렉토리입니다.

Javadocs :

 
Parameters: 
    dir - the directory in which the file was found. 
    name - the name of the file. 

아마 당신은 무엇을 의미했다 : dir` 그것이 name`이로 끝나야합니다`상태 중 하나로서, 당신의 상태가 사실이 될 것이다 디렉토리입니다

new File(dir, name).isDirectory() 
+0

그것을 오버라이드하여'dir'을 제거하지 않습니까? 즉, 파일이'accept()'메서드의 재정의 된 버전에서 파일 (= 디렉토리가 아님)이되는 것을 막을 수는 없습니다. –

+0

그것은 오버라이드에 관한 것이 아니라 메소드의 계약입니다. 호출자는 호출 할 때 디렉토리를 제공합니다. 물론 발신자가 파일을 넣을 수는 있지만 계약에 위배됩니다 (즉, 필터 구현이 아닌 발신자 코드의 버그 일 수 있음). 가장 일반적으로 호출자는 잘 설정된 라이브러리이므로 이러한 오류는 발생하지 않습니다. –

+0

thats, 고마워, 젠장 – XtremeBaumer