Java统计上传到服务器某个目录下及其所有子目录下某种文件类型的大小总计并转换单位-工具类

import java.io.File;

public class RecursiveFileSizeCalculator {
    public static void main(String[] args) {
        // 指定目录路径和文件类型
        String directoryPath = "/path/to/your/directory";
        String fileType = ".txt"; // 想要统计的文件类型,比如 .txt, .jpg 等

        // 调用方法计算文件大小
        long totalSize = calculateTotalFileSize(directoryPath, fileType);

        // 打印结果
        System.out.println("Total size of " + fileType + " files in directory " + directoryPath + " and its subdirectories is: " + totalSize + " bytes");
    }

    // 递归方法计算目录下及其子目录下指定类型文件的总大小
    private static long calculateTotalFileSize(String directoryPath, String fileType) {
        long totalSize = 0;

        File directory = new File(directoryPath);
        // 确保目录存在且是一个目录
        if (directory.exists() && directory.isDirectory()) {
            // 获取目录下所有文件和子目录
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isFile() && file.getName().endsWith(fileType)) {
                        // 如果是文件且是指定类型,累加文件大小
                        totalSize += file.length();
                    } else if (file.isDirectory()) {
                        // 如果是目录,递归计算子目录下指定类型文件的大小
                        totalSize += calculateTotalFileSize(file.getAbsolutePath(), fileType);
                    }
                }
            }
        } else {
            System.err.println("Directory does not exist or is not a directory");
        }

        return totalSize;
    }
}

将字节数自动转换为合适的单位(MB 或 GB)时,可以编写一个方法来执行这个转换。以下是一个Java方法,它可以将字节数转换为适合的单位(B, KB, MB, GB),并输出一个带单位的字符串:

public class ByteConverter {
    public static void main(String[] args) {
        long bytes = 12425976;
        String size = convertBytes(bytes);
        System.out.println("12425976 bytes is approximately " + size);
    }

    public static String convertBytes(long bytes) {
        int unit = 1024;
        if (bytes < unit) return bytes + " B";
        int exp = (int) (Math.log(bytes) / Math.log(unit));
        String pre = "KMGTPE".charAt(exp-1) + "i";
        return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
    }
```java
public class ByteConverter {
    public static void main(String[] args) {
        long bytes = 12425976;
        String size = convertBytes(bytes);
        System.out.println("12425976 bytes is approximately " + size);
    }

    public static String convertBytes(long bytes) {
        int unit = 1024;
        if (bytes < unit) return bytes + " B";
        int exp = (int) (Math.log(bytes) / Math.log(unit));
        String pre = "KMGTPE".charAt(exp-1) + "i";
        return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
    }
}

这段代码定义了一个 convertBytes 方法,它接受一个 long 类型的字节数作为输入,并返回一个带有合适单位的字符串表示。这个方法会根据字节数自动选择合适的单位(B, KB, MB, GB 等),并进行四舍五入到小数点后一位。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上来源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值