java实现遍历文件目录,并在控制台以树形结构展示

package www.tree.cn;

import java.io.File;

/**
 * @Author:DAVEZJ
 * @Date: Created in 18:07 2018/10/27
 * @E-Mail:
 * 一个用java遍历文件目录,并且在控制台以树形结构的方式展开搜索的文件
 */


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

    treeALL(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();//listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
        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("G:/Download");
        treeALL t = new treeALL(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("==============================");
    }
}

原址: https://blog.csdn.net/qq_34122603/article/details/69374959?locationNum=8&fps=1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值