2014-03-27 72 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模式的行動。