假如我给定文件夹C:\test, 在test文件夹下面可能还有其他一层一层的文件夹,我要找出所有这些文件夹里面符合一定条件的文件,这个文件我已经写好一个类了:class TestCaseFilter implements FilenameFilter ,那么我想写一个函数,得到符合这些条件的所有的文件的文件名列表(string 数组),该怎么写呢?

解决方案 »

  1.   

    import java.io.File;
    import java.io.FilenameFilter;
    public class TestCaseFilter implements FilenameFilter { public boolean accept(File dir, String name) {
    //可以使用正则表达式等多种匹配方式
    //如果返回真,则在调用list方法时列举出来,反之 
    return name.endsWith(".jar");//显示以.jar结尾的文件
    }}
    ************************************************************************
    import java.io.File;
    public class ListFile { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    File file=new File("c:/test");
    String[] filenames=file.list(new TestCaseFilter());
    for(int i=0;i<filenames.length;i++){
    System.out.println(filenames[i]);
    }
    }}
      

  2.   

    class listFile {

    private static File file;
    private static File lastDr;
    private static ArrayList<String> arr = new ArrayList<String>();
    private static File[] rootList;    
    public static ArrayList<String> listFolder(String path) {
        
    String[] temp;

    file = new File(path);
        File[] list = file.listFiles();
        TestCaseFilter filter = new TestCaseFilter();
        
        for (int i = 0; i < list.length; i++) {
            if (list[i].isDirectory()) {
    //          oldLastDr = lastDr;
             lastDr = list[i];
                listFolder(list[i].getPath());
            }
            else {
             temp = lastDr.list(filter);
    //          if(lastDr != oldLastDr) {
             for (int k = 0; k < temp.length; k++)
             arr.add(temp[k]);}
            
    //         }      
            i = list.length;
            
        }
        for (int k = 0; k < arr.size(); k++){
         System.out.println(arr.get(k));
        }
        return arr;
    }
    }
    可是这样似乎文件被读取了好多遍