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