2017-12-01 5 views
0

これは私のFilenameFilterです。これは、ディレクトリとファイルが.docxで終わることを許可してください。しかし何らかの理由で、ファイルの終わりに関係なく、またはそのディレクトリかどうかにかかわらず、すべてのファイルを許可します。一度私は|| dir.isDirectory()を取り除いて期待通りに働いています。FilenameFilterは不思議な結果をもたらします

new FilenameFilter() { 

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

私は間違っています、それはすべてのファイルを受け入れることができますか?

+0

'dir'がディレクトリである場合、それはNAME'がで終わらなければならない'どちらかを述べて、あなたの状態は "、trueになります.docx "または" dir "はディレクトリ – Ronald

答えて

3

dirは、常にそれと同じ単純なディレクトリです。

Javadocs:あなたはおそらくだった意味は何

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

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

それを上書きすることで、彼は' dir'を取り除かないでしょうか?つまり、ファイルが 'accept()'メソッドのオーバーライドされたバージョンのファイル(ディレクトリではない)であることを止めるものはありません。 –

+0

これはオーバーライドではなく、呼び出し元が呼び出すときに呼び出し元がディレクトリを提供するという、メソッドのコントラクトです。もちろん、呼び出し側はファイルをそこに置くことができますが、それは契約に違反します(つまり、フィルタ実装ではなく呼び出し側コードのバグ)。最も一般的には、呼び出し元は十分に確立されたライブラリなので、そうしたエラーは起こりそうにありません。 –

+0

thats、ありがとう、たくさんの男 – XtremeBaumer

関連する問題