递归查询文件目录下所有的文件(八)

一 查询目录下所有的文件


有时候,需要根据一个目录来查询该目录下所有的文件信息。 主要是根据File 类来进行相应的处理。 这里讲其中的一种方式。


public static void showFileList(File file){
        if(!file.exists()){
            System.out.println("这是一个错误的路径");
        }
        if(file.isDirectory()){ //如果是目录的话,递归调用这个查询方法。
            File []files=file.listFiles();
            for (File file2 : files) {
                showFileList(file2);
            }
        }else{
            if(file.isFile()){ //如果是文件的话
                //System.out.println(file.getAbsolutePath());
                //System.out.println(file.getPath()+File.separator+file.getName());
                System.out.println(file); //这三种方式均可以。
            }
        }
    }


测试为:


File root=new File("D:"+File.separator+"a");
        showFileList(root); //0表示的是级别


查询结果为:


递归查询文件目录下所有的文件(八)


二. 集合传入传出


上面的这个方法,输出时竟然是System.out.println() 方式进行输出的,可以做简单的测试使用,但无法在代码中进行重用的,需要将所有的文件信息都存储起来。 可以存储在一个List 集合里面, 只存储文件名,所以用 String 类型即可。与第一种方式是一样的,只是将输出语句转换成add() 方法添加到集合里面。


public static void showFileList(File file,List<String> fileNameList){
        if(!file.exists()){
            System.out.println("这是一个错误的路径");
        }
        if(file.isDirectory()){
            File []files=file.listFiles();
            for (File file2 : files) {
                showFileList(file2);
            }
        }else{
            //System.out.println(file.getAbsolutePath());
            //System.out.println(file.getPath()+File.separator+file.getName());
            if(file.isFile()){
                fileNameList.add(file.getAbsolutePath());
            }
        }
    }


集合是从外面传递进来的,当然也可以在内部进行初始化,然后返回集合。

调用形式为:


        File root=new File("D:"+File.separator+"a");
        List<String> fileNameList=new ArrayList<String>();
        showFileList(root,fileNameList);
        for(String fileName:fileNameList){
            System.out.println(fileName);
        }


输出的结果,与上面一样。


三. 树型展示文件列表


上面只是展示最后一层的文件名,各个文件之间不容易一眼看出级别,如果能够树型 tree 展示就很好了。


递归查询文件目录下所有的文件(八)


如这样形式的简单展示。 其实,这个主要的思想就是在文件的名称前端添加空格,后面是正常的文件名,主要是对空格进行相应的处理。


public static void showFileList(File dir,int level){
        //级别进行++的处理。
        System.out.println(getLevelFormatter(level)+dir.getName());
        // 级别是局部参数
        level++;
        if(dir.isDirectory()){  //是目录的话
            //列出目录下的所有文件,也可以是目录。
            File[] file=dir.listFiles();
            for (File file2 : file) {
                showFileList(file2, level);
            }
        }
    }


//对文件名称进行处理的方式为


public static String getLevelFormatter(int level){
        StringBuilder sb=new StringBuilder("-|");
        while(level>0){
            // 四个空格,可以多个使用。
            sb.insert(0,"    ");
            level--;
        }
        return sb.toString();
    }


刚开始时,传入的级别是0. 测试方法为:


        File root=new File("D:"+File.separator+"a");
        showFileList(root,0); //0表示的是级别


结果与上面的一致。


谢谢!!!

上一篇:【机房重构】一步一步往上爬——七层中的那些事


下一篇:浅谈WinCE快速启动的几种方法