java实现遍历文件目录,并以树形结构展示搜索出来的文件

package test;

import java.io.File;
import java.text.SimpleDateFormat;

public class Test03 {
    static int dirs = 0;//定义的变量用于存放统计出来的目录数量和文件数量
    static int files = 0;
    static long dirLength = 0 ;//定义的变量用于存放统计出来的目录大小和文件大小
    static long fileLength = 0;
    static String preStr = "";//定义缩进量,用于以树形结构展现层级
    File f = null;
    Test03(File f){
        this.f = f;
    }

    public void tree(File f, int level) {
        /**
         * 由于全局变量在程序销毁之前,
        变量就会一直保存在内存中,这样就会导致上一次运算的值保留了下来,
        再次执行方法的时候就会将值累加,
        这样会导致即使在同一级目录下的文件也会呈现树形分级,
        因此,此处要定义一个局部变量,
        每次执行的时候更新相应的全局变量,因为局部变量在方法每次执行完的时候被销毁,
        也就是说每次执行该方法的时,这个局部变量都不一定是相同的值,这样就避免了累加
        */

        String preStr = "";
        this.preStr=preStr;

        for (int i = 0; i < level; i++) {

            //判断level的层级数,每多一层就添加一个间隔
            preStr +="\t";
        }

        //定义文件数组,用存放获取到的文件目录和文件
        File[] childs = f.listFiles();

        for (int i = 0; i < childs.length; i++) {

            //用for 循环一个个取出来
            //childs[i].isDirectory()用于判断取取出来的file是文件还是目录,然后执行相应的操作
            if (childs[i].isDirectory()) {

                dirs++;//获取一个目录就自加一次,记录数量           

            }else {

                files++;//获取一个文件就自加一次,记录数量
                fileLength=childs[i].length();//该文件的大小(字节数)
                dirLength += childs[i].length();//将获取到的每个文件的大小(字节数)加起来,记录整个目录字节数

            }

            if (!childs[i].isDirectory()) {
                //打印搜索出的文件和目录,如果是文件就显示文件字节数

                System.out.println(preStr + childs[i].getName()+"    "+fileLength+"字节");    
            }else{

                System.out.println(preStr + childs[i].getName());
                System.out.println(preStr +"-------------------------");
            }

            if (childs[i].isDirectory()) {
                //判断是否为目录,如果是,再次执行tree()方法,将子目录里面的文件再次遍历出来
                tree(childs[i], level + 1);
            }
        }

    }

    public static void main(String[] args) {

        //给出指定目录
        File f = new File("D:/OA需求文档");

        Test03 t = new Test03(f);

        //打印指定目录,即最顶层目录
        System.out.println("目标目录:"+f.getName());

        //开始遍历目录
        t.tree(f, 1);
        System.out.println("==============================");
        //打印目录数量和字节数
        System.out.println("这个目录中共:"+dirs+"个目录");
        //打印文件数量和字节数
        System.out.println("这个目录中有:"+files+"个文件"+"  "+"共"+dirLength+"字节");
        //System.out.println("==============================");
    }
}
 

你可能感兴趣的:(遍历展示文件)