手写分析文件大小工具

背景:
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);

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Everything QT 是一种跨平台的开源桌面搜索引擎,它旨在为用户提供快速、高效的本地文件搜索功能。和其他的搜索引擎不同,Everything QT 使用纯手写的方式实现了全文搜索功能,在用户输入关键词之后,它可以迅速地在计算机上的所有文件中查找匹配项,并将结果以列表形式展示出来。 Everything QT 的手写实现使得它具有极高的搜索速度和准确性。它使用了索引技术,通过扫描计算机上的文件系统并记录文件的大小、修改日期等信息,从而可以高效地定位匹配项。与传统的搜索引擎相比,Everything QT 不需要通过逐个打开文件来搜索内容,这大大提高了搜索的速度。 除了快速搜索功能,Everything QT 还提供了一些实用的功能。用户可以通过设置来筛选搜索结果,根据文件格式、修改日期等进行过滤。此外,Everything QT 还支持正则表达式搜索,使得用户可以更加灵活地进行搜索。 Everything QT 支持跨平台,在 Windows、Linux 和 MacOS 等操作系统上都可以运行。无论你是在工作中还是生活中需要频繁搜索本地文件,使用 Everything QT 都可以提高你的工作效率。 总之,Everything QT 是一款快速高效的本地文件搜索引擎,通过手写实现的全文搜索功能,能够帮助用户更快地找到他们需要的文件。无论是对个人用户还是企业用户来说,Everything QT 都是一个非常实用的工具

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值