Java FilenameFilter产生神秘的结果

Java FilenameFilter产生神秘的结果,java,filtering,filenames,Java,Filtering,Filenames,这是我的FilenameFilter,它应该只允许以.docx结尾的目录和文件。然而,出于某种原因,它现在允许每个文件,不管它的结尾是什么,或者它是否是一个目录。一旦我删除了| | dir.isDirectory(),它就会正常工作 new FilenameFilter() { @Override public boolean accept(File dir, String name) { if (name.toLowerCase().endsWith(".do

这是我的
FilenameFilter
,它应该只允许以
.docx
结尾的目录和文件。然而,出于某种原因,它现在允许每个文件,不管它的结尾是什么,或者它是否是一个目录。一旦我删除了
| | dir.isDirectory()
,它就会正常工作

new FilenameFilter() {

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

我做错了什么,它接受每个文件?

dir
总是一个目录,就这么简单

:


dir
始终是一个目录,就这么简单

:


如果
dir
是一个目录,您的条件将为true,因为它说明
name
应该以.docx结尾,或者
dir
是一个目录如果
dir
是一个目录,您的条件将为true,因为它说明
name
应该以.docx结尾,或者
dir
是一个目录,通过覆盖它,难道他没有摆脱dir这个东西吗?我的意思是,没有什么能阻止文件在其被覆盖的
accept()
方法版本中成为文件(=不是目录)。这不是覆盖,而是方法的契约——调用方在调用它时将提供目录。当然,调用方可能会在其中放入一个文件,但这将违反合同(即,调用方代码中的错误,而不是过滤器实现)。大多数情况下,调用方是一个建立良好的库,因此此类错误不太可能发生。是的,我猜他的问题在代码中更高。谢谢你的澄清。通过覆盖它,他不是摆脱了
dir
吗?我的意思是,没有什么能阻止文件在其被覆盖的
accept()
方法版本中成为文件(=不是目录)。这不是覆盖,而是方法的契约——调用方在调用它时将提供目录。当然,调用方可能会在其中放入一个文件,但这将违反合同(即,调用方代码中的错误,而不是过滤器实现)。大多数情况下,调用方是一个建立良好的库,因此此类错误不太可能发生。是的,我猜他的问题在代码中更高。谢谢你的澄清。 Parameters: dir - the directory in which the file was found. name - the name of the file.
new File(dir, name).isDirectory()