2014-03-27 40 views
0

需要说明在下面的代码:上的方法调用

public File[] findFiles (String path) 
{ 
    FilenameFilter textFilter = new FilenameFilter() 
    { 
     @override 
     public boolean accept(File dir, String name) 
     { 
      if(name.toLowerCase().endsWith(".txt")) 
       return true; 
      else 
       return false; 
     } 
    }; 

    File[] txtFiles = new File(path).listFiles(textFilter); 

    return txtFiles; 
} 

据我所知,一个匿名类,它实现接口FilenameFilter,定义和实例化。但我不明白如何直接调用方法accept

+1

的listFiles()方法实际上调用一个文件或目录名作为参数,这个accept()方法。 – VishalDevgire

回答

3

如果您检查listFiles的源代码,则会调用accept方法。 here's the source code

public File[] listFiles(FilenameFilter filter) { 
String ss[] = list(); 
if (ss == null) return null; 
ArrayList v = new ArrayList(); 
for (int i = 0 ; i < ss.length ; i++) { 
    if ((filter == null) || filter.accept(this, ss[i])) { 
            ^^^^^^ 
    v.add(new File(ss[i], this)); 
    } 
} 
return (File[])(v.toArray(new File[v.size()])); 
} 
+1

感谢您提及的源代码! :) –

+0

此外,在您的IDE中,您可以附上Java提供的类的源代码,它将有助于了解更多信息。 – sanbhat

2

accept()方法是在(目录)中找到的每个文件file这就是所谓的File.listFiles()方法中调用。

这是一个callback模式的行动。