• AJPFX:实现递归统计文件夹的总大小


    class Statistical {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            //提示用户输入一个目录路径
            System.out.print("请输入要统计的文件夹路径:");
            String dirPath = sc.nextLine();
            //封装成文件对象
            File dir = new File(dirPath);
            /*
             * 对文件的一些判断,是否存在和是否是目录
             */
            if (! dir.exists()) {
                System.out.println("该文件路径不存在");
                return ;
            }
            if (dir.isFile()) {
                System.out.println("请指定一个目录");
                return ;
            }
            long count = count(dir);//获得文件总字节数
            System.out.println(dir.getName() + "的大小为" + transform(count));//输出文件夹大小
        }
        
        public static String transform(long count) {
            int times = 0;
            while (count > 1024) {
                count /= 1024;
                times ++;
            }
            switch (times) {
            case 1:
                return count + "KB";
            case 2:
                return count + "MB";
            case 3:
                return count + "GB";
            case 4:
                return count + "TB";
            case 5:
                return count + "PB";
            default:
                return null;
            }
        }
        
        public static long count(File dir) {
            File[] files = dir.listFiles();
            long sum = 0;
            for (File file : files) {
                if (file.isFile()) {
                    sum += file.length();
                } else if (file.isDirectory()) {
                    sum += count(file);
                }
            }
            return sum;
        }
    }

    递归是在操作文件经常会采用的一种算法,尤其是对文件夹做操作时:比如统计文件夹大小,复制文件夹,删除文件夹等,都要用到递归的算法,使用递归算法能让以前较难的逻辑简单化。
    统计文件夹的大小实际上就是列出文件夹中的所有文件,统计每个文件的大小,如果是文件夹,就要再重新列出这个文件夹的所有文件,再统计。可以看出,列出文件夹的所有文件和统计文件夹是重复的动作,所以这时用递归就解决这个问题,如果是文件夹,就重新调用这个方法,把遍历到的文件夹作为参数传过去。最后就能计算出文件夹的总大小了。
    我还做了一个判断文件大小的这个小功能,就是能把最后计算出来的字节大小转换成适合单位的大小再打印,比如2049B 会显示2K而不是1029B

  • 相关阅读:
    最新金九银十JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
    这是一份稳收秋招offer的jvm常见面试题指南,助你成为offer收割机
    五年java开发面经分享,注意这些细节让你offer拿到手软
    连尚网络Java实习面试(offer到手含面试经验及答案)
    汇通天下Java实习面试(offer到手含面试经验及答案)
    初速度Java实习面试(offer到手含面试经验及答案)
    斑马网络Java实习面试(offer到手含面试经验及答案)
    贝贝Java实习面试(offer到手含面试经验及答案)
    辣妈帮Java实习面试(offer到手含面试经验及答案)
    适赫物流Java实习面试(offer到手含面试经验及答案)
  • 原文地址:https://www.cnblogs.com/AJPFX/p/10876073.html
Copyright © 2020-2023  润新知