2011-11-30 3 views
5

私は、ディレクトリに再帰的にディレクトリ.classをリストする簡単なプログラムをコーディングしています。FileNameFilterとFileFilterの使用

は当初、私はこれをコード化:

public class Parsing{ 

    public static void main(String[] args) { 
     File f=new File(".\\"); 
     readRecursive(f); 
    } 

    private static void readRecursive(File f) { 
     String[] files=f.list( new FilterByteCode()); 
     if(null==files){ 
      files=new String[0]; 
     } 
     for(String curr: files){ 
      File currFile=new File(curr); 
      System.out.println(currFile.getName()); 
      readRecursive(currFile); 
     } 
    } 
}//end parsing 

class FilterByteCode implements FilenameFilter { 


    @Override 
    public boolean accept(File dir, String name) { 
     if(name.endsWith(".class")){ 
      return acceptByteCode(dir); 
     }else{ 
      return (null!=dir && dir.exists() && dir.isDirectory()); 
     } 

    } 

     private boolean acceptByteCode(File dir) { 
      boolean res= (null!=dir && dir.exists() && dir.isFile()); 
      return res; 
     } 

}//FilterByteCode 

しかし、このリストのみディレクトリとサブディレクトリ、ファイルではなく!ファイルの.classをリストアップし、

private static void readRecursiveFile(File f) { 
     File[] files=f.listFiles(new FilterByteCode2()); 
     if(null==files){ 
      files=new File[0]; 
     } 
     for(File curr: files){ 
      System.out.println(curr.getName()); 
      readRecursiveFile(curr); 
     } 
    } 

class FilterByteCode2 implements FileFilter { 

    @Override 
    public boolean accept(File pathname) { 
     if(null!=pathname && pathname.getName().endsWith(".class")){ 
      return acceptByteCode(pathname); 
     }else{ 
      return (null!=pathname && pathname.exists() && pathname.isDirectory()); 
     } 
    }//accept 

    private boolean acceptByteCode(File dir) { 
     boolean res = (null != dir && dir.exists() && dir.isFile()); 
     return res; 
    } 

}//FilterByteCode2 

と、この作品:

私はFileFilterのを使って解きます。

私はFileFilterのFilenameFilterの違いを読んで、私は行動の違いの原因を見つけていません。

+0

何を意味するのですか? –

+0

現在のディレクトリ( "。")。 – alepuzio

答えて

9

FilenameFilter#accept()dirの引数は、ファイルが見つかった親ディレクトリを表します。期待していたファイル自体ではありません。だからdir.isFile()はいつもあなたのFilenameFilterの方法でfalseを返すので、acceptByteCode()は常にfalseを返します。

関連する問題