手写分析文件大小工具

背景:
window 用久了磁盘变红了,又不想安装大文件分析的软件,突发奇想能否自己写一个代码,分析有哪些大文件

文件的单位,最高记作G

 // 文件大小单位
    static String[] fileSizeUnits = {"B", "KB", "M", "G"};

计算文件或者文件夹的大小

/**
     * 得到文件大小
     * @param folder
     * @return
     */
    public static long getFileSize(File folder) {
        if (!folder.isDirectory()) {
            return folder.length();
        }
        long size = 0;
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    size += file.length();
                } else {
                    size += getFileSize(file);
                }
            }
        }
        return size;
    }

打印文件大小信息

 /**
     * 打印文件大小
     *
     * @param fileSizeUnits 文件大小单位
     * @param fileSize      文件大小
     * @param index         单位的下标
     * @param tempSize      当前文件单位对应的Byte大小
     */
    public static void print(String[] fileSizeUnits, long fileSize, int index, long tempSize) {
        // 达到最大单位
        if (index >= fileSizeUnits.length - 1) {
            System.out.print(" " + fileSize / tempSize + "" + fileSizeUnits[index]);
            return;
        }
        // 能否达到下一个单位
        if (fileSize >= tempSize * 1024) {
            // 进入下一个单位
            print(fileSizeUnits, fileSize, index + 1, tempSize * 1024);
            // 输出本单位
            System.out.print(" " + (fileSize % (tempSize * 1024)) / tempSize + "" + fileSizeUnits[index]);
            return;
        }
        System.out.print(" " + fileSize / tempSize + "" + fileSizeUnits[index]);
    }

获取指定文件夹的文件大小信息,支持找最大的几个文件,找几层

/**
     * @param files:   文件
     * @param level    目前是第几层
     * @param endLevel 分析到第几层
     * @param topK     只找前面的几个文件,为空标识不限制
     */
    public static void show(List<File> files, int level, int endLevel, Integer topK) {
        if (files.isEmpty() || level >= endLevel) {
            return;
        }
        String spitLine = "-----------------------%s-------------------\n";
        System.out.println(String.format(spitLine, level));
        Map<String, Long> sizeMap = new HashMap<>();
        files.forEach(e -> sizeMap.put(e.getAbsolutePath(), getFileSize(e)));

        Collections.sort(files, (a, b) -> {
            long r = sizeMap.get(b.getAbsolutePath()) - sizeMap.get(a.getAbsolutePath());
            if (r == 0) {
                return 0;
            }
            return r > 0 ? 1 : -1;
        });

        int k = 0;
        for (File file : files) {
            if (topK != null && k++ > topK) {
                break;
            }
            long folderSize = sizeMap.get(file.getAbsolutePath());
            System.out.print(file.getAbsoluteFile() + "\t");
            print(fileSizeUnits, folderSize, 0, 1);
            System.out.println();

        }
        System.out.println(String.format(spitLine, level));
        System.out.println();

        List<File> nextFile = new ArrayList<>();
        for (File file : files) {
            if (file.isDirectory()) {
                File[] arr = file.listFiles();
                if (arr == null) {
                    continue;
                }
                nextFile.addAll(Arrays.asList(arr));
            }
        }
        show(nextFile, level + 1, endLevel, topK);
    }

测试如下:

        String path = "C:\\Users\\xxx";
        File file = new File(path);
        show(Arrays.asList(file), 1, 3, 10);

执行结果如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理

1、参考文档 Spring Cloud Alibaba参考文档 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html Spring Cloud Alibaba官方文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/ 2、引入 Alibaba 依赖 每个 SpringBoot 都有对应的…

kubernetes详解——从入门到入土(更新中~)

k8s简介 编排工具&#xff1a;系统层面ansible、saltstackdocker容器docker compose docker swarm docker machinedocker compose&#xff1a;实现单机容器编排docker swarm&#xff1a;实现多主机整合成为一个docker machine&#xff1a;初始化新主机mesos marathonmesos …

如何编写一份完整的软件测试报告?(进阶版)

作为测试从业者&#xff0c;编写测试用例&#xff0c;测试计划&#xff0c;测试报告都是必经之路&#xff0c;最近完成了年终述职以及版本准出&#xff0c;感觉测试报告或者各类报告真是职场人不可或缺的一项技能&#xff0c;趁着热乎劲&#x1f525;&#xff0c;写下一些注意事…

win10下maven安装与配置

1.下载安装 去官网下载最新版的安装包&#xff0c;然后解压到安装目录。 2.配置 右键桌面的计算机图标&#xff0c;属性–>高级系统设置–>环境变量&#xff0c;添加M2_HOME的环境变量&#xff0c;然后将该变量加入的PATH中。 如果想要修改maven的本地仓库位置&…

Hadoop完全分布式搭建教程(完整版)

分别创建三个节点 master slave1 slave2 在master节点下安装jdk # 解压 [rootmaster /]# tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/ # 修改安装包名为 java [rootmaster /]# mv /opt/module/jdk1.8.0—212/ /opt/module/java# 配置环境变量并使其生…

利用 EC2 和 S3 免费搭建私人网盘

网盘是一种在线存储服务&#xff0c;提供文件存储&#xff0c;访问&#xff0c;备份&#xff0c;贡献等功能&#xff0c;是我们日常中不可或缺的一种服务。 &#x1f4bb;创建实例 控制台搜索EC2 点击启动EC2 选择AMI 选择可免费试用的 g代表采用了Graviton2芯片。 配置存储 配…

黑苹果配置清单

手里的MacBookPro已经快沦为电子垃圾了&#xff0c;平时用MacOS比较多&#xff0c;Window用的比较少&#xff0c;而苹果电脑的价格不管是MacBookPro还是MacMini丐版的便宜但是面对现在Window动不动就64g内存的情况就显得微不足道了&#xff0c;高配的价格直接把我劝退&#xff…

Ansys Speos SSS|执行 Camera Sensor模拟结果后处理

附件下载 联系工作人员获取附件 概述 本文是Speos Sensor System&#xff08;SSS&#xff09;的使用指南&#xff0c;这是一个强大的解决方案&#xff0c;用于camera sensor模拟结果的后处理。本文的目的是通过一个例子来理解如何正确使用SSS。当然本文描述的分析步骤适合任…

【数据结构和算法】找出叠涂元素

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 前言 这是力扣的2661题&#xff0c;难度为中等&#xff0c;解题方案有很多种&…

面试就是这么简单,offer拿到手软(四)—— 常见java152道基础面试题

面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 面试就是这么简单&#xff0c;offer拿到手软&#xff08;三&#xff…

感冒 发烧 咳嗽记录

感冒 风寒: 清鼻涕 热感冒: 细菌记录, 脓鼻涕. 咳嗽 先是清痰咳嗽, 后是浓痰,细菌感染, 白细胞噬菌体, 所以要补充蛋白质,维生素. 胸骨上窝 , 天突穴 ,后面上支气管的位置, 往下会变成左右两支,连接到肺部 普通咳嗽: 用哈气拍打背部的方式. 把痰去除. 吃点 盐酸氨溴索片 增加支…

17.认识下Docker之docker的核心原理(2)

1.容器-我的小世界 不知道大家看没看过小说《完美时间》&#xff0c;里面石昊经常进入一个小世界在里面与世隔绝的修炼或者战斗&#xff0c;总之就是在一个完全封闭的空间里做他想做的事情而与外界隔离&#xff0c;不受侵扰。通过前面的分析我们知道&#xff0c;Namepace让应用…

滚动翻页效果

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document&…

推荐6款本周 火火火火 的开源项目

本周 GitHub项目圈选 节选自微博、知乎、掘金等社区。 &#x1f525;&#x1f525;&#x1f525;本周推荐的开源项目是&#xff1a; kopia 日常备份工具 screenshot-to-code 截屏生成代码 MiniSearch 全文搜索 clone-voice 声音克隆 NvChad 高颜值终端 DB-GPT-Hub 文本到…

什么是美颜sdk?美颜sdk对比评测、技术评估

为了满足用户对于更美好画面的需求&#xff0c;各种美颜sdk应运而生。本文将深入探讨美颜sdk的概念&#xff0c;进行对比评测&#xff0c;并对其技术进行综合评估。 一、什么是美颜sdk&#xff1f; 美颜sdk使开发者们可以方便地在自己的应用中集成美颜功能&#xff0c;从而提…

【GPU】linux 安装、卸载 nvidia 显卡驱动、cuda 的官方文档、推荐方式(runfile)

文章目录 1. 显卡驱动1.1. 各版本下载地址1.2. 各版本文档地址1.3. 安装、卸载方式 2. CUDA2.1. 各版本下载地址2.2. 各版本文档地址2.3. 安装、卸载方式2.4. 多版本 CUDA 切换方式 1. 显卡驱动 1.1. 各版本下载地址 https://www.nvidia.com/Download/Find.aspx?langzh-cn 1…

odoo15关于tree视图添加按钮说明

1、odoo15的tree已经可以像form一样直接添加header标签 2、选取具体数据后&#xff0c;按钮出现&#xff0c;只需要在按钮中添加具体功能即可&#xff0c;下面是一个继承 3、效果&#xff1a;

量化学习笔记——入门与基本概念

基本概念 量化投资 投资的核心是大数定律。 量化投资就是以数据为基础&#xff0c;以策略模型为核心&#xff0c;以程序化交易为手段&#xff0c;以 追求绝对收益为目标 的投资方法。 用数学表示金融市场&#xff0c;其数学定义&#xff1a; Y F ( x 1 , x 2 , . . . . .…

CeresPCL 曲线拟合之三阶多项式(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前我们讨论过使用Ceres拟合一条三阶多项式曲线,但是它存在一个问题,这个问题其实也是最小二乘法的通病,即对噪声比较敏感,造成拟合曲线的时候总让人心里没底,结果容易“飘”。而一般对于这种情况,一个通用的…

tmux简单使用

它允许你在一个终端窗口中创建多个终端会话&#xff0c;并在它们之间进行切换。以下是tmux的一些主要用途和功能&#xff1a; 多窗口&#xff1a; Tmux允许你在一个终端中创建多个窗口。每个窗口可以包含一个或多个终端会话&#xff0c;你可以轻松地在这些窗口之间切换。面板分…