package com.citygis.web.utils;

import java.io.File;
import java.math.BigDecimal;

public class FileUtils {

    public static String getFilesLengthDesc(long filesLengthB) {
        BigDecimal b = new BigDecimal("1024");
        BigDecimal length = new BigDecimal(filesLengthB);
        BigDecimal filesLengthKB = length.divide(b, 1, BigDecimal.ROUND_HALF_UP);
        if (filesLengthKB.compareTo(b) > 0) {
            BigDecimal filesLengthMB = filesLengthKB.divide(b, 1, BigDecimal.ROUND_HALF_UP);
            if (filesLengthMB.compareTo(b) > 0) {
                BigDecimal filesLengthGB = filesLengthMB.divide(b, 1, BigDecimal.ROUND_HALF_UP);
                return filesLengthGB.stripTrailingZeros().toPlainString() + " GB";
            } else {
                return filesLengthMB.stripTrailingZeros().toPlainString() + " MB";
            }
        } else {
            return filesLengthKB.stripTrailingZeros().toPlainString() + " KB";
        }

    }

    public static BigDecimal getFilesLengthMB(File file) {
        BigDecimal filesLengthKB = getFilesLengthKB(file);
        BigDecimal b = new BigDecimal("1024");
        return filesLengthKB.divide(b, 2, BigDecimal.ROUND_HALF_UP);
    }

    public static BigDecimal getFilesLengthKB(File file) {
        long filesLengthB = getFilesLengthB(file);
        BigDecimal b = new BigDecimal("1024");
        BigDecimal length = new BigDecimal(filesLengthB);
        return length.divide(b, 2, BigDecimal.ROUND_HALF_UP);
    }

    public static long getFilesLengthB(File file) {
        // 初始化一个文件大小的变量
        long fileLength = 0;
        if (file != null) {
            // 判断是否是一个标准的文件
            if (file.isFile()) {
                // 如果是，直接获取文件的长度（大小）
                fileLength = file.length();
                return fileLength;
            }
            // 调用file的listFiles方法得到目录中的所有文件，用一个File类型的数组来接收
            File[] fileArray = file.listFiles();
            // 判断数组是否为空
            if (fileArray != null) {
                // 遍历数组
                for (File f : fileArray) {
                    // 递归调用方法来得到文件夹的大小
                    fileLength += getFilesLengthB(f);
                }
            }

        } else {
            System.out.println("file为空！");
        }

        return fileLength;
    }
}
