package com.dy.common.util; 
 | 
  
 | 
import lombok.Data; 
 | 
import oshi.software.os.FileSystem; 
 | 
import oshi.software.os.OSFileStore; 
 | 
import oshi.software.os.OperatingSystem; 
 | 
  
 | 
import java.util.LinkedList; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * @Author: liurunyu 
 | 
 * @Date: 2024/8/2 13:54 
 | 
 * @Description 
 | 
 */ 
 | 
public class SysFileSysUtil { 
 | 
    /** 
 | 
     * 磁盘信息 
 | 
     */ 
 | 
    public static LinkedList<SysFile> info(OperatingSystem os)  { 
 | 
        LinkedList<SysFile> sysFiles = new LinkedList<SysFile>(); 
 | 
        FileSystem fileSystem = os.getFileSystem(); 
 | 
        List<OSFileStore> fsArray = fileSystem.getFileStores(); 
 | 
        for (OSFileStore fs : fsArray) { 
 | 
            long free = fs.getUsableSpace(); 
 | 
            long total = fs.getTotalSpace(); 
 | 
            long used = total - free; 
 | 
            SysFile sysFile = new SysFile(); 
 | 
            sysFile.setDirName(fs.getMount()); 
 | 
            sysFile.setSysTypeName(fs.getType()); 
 | 
            sysFile.setTypeName(fs.getName()); 
 | 
            sysFile.setTotal(convertFileSize(total)); 
 | 
            sysFile.setFree(convertFileSize(free)); 
 | 
            sysFile.setUsed(convertFileSize(used)); 
 | 
            sysFile.setUsage(DoubleUtil.mul(DoubleUtil.div(used, total, 4), 100)); 
 | 
            sysFiles.add(sysFile); 
 | 
        } 
 | 
        return sysFiles ; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 字节转换 
 | 
     * 
 | 
     * @param size 字节大小 
 | 
     * @return 转换后值 
 | 
     */ 
 | 
    public static String convertFileSize(long size) { 
 | 
        long kb = 1024; 
 | 
        long mb = kb * 1024; 
 | 
        long gb = mb * 1024; 
 | 
        if (size >= gb) { 
 | 
            return String.format("%.1f GB", (float) size / gb); 
 | 
        } else if (size >= mb) { 
 | 
            float f = (float) size / mb; 
 | 
            return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); 
 | 
        } else if (size >= kb) { 
 | 
            float f = (float) size / kb; 
 | 
            return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); 
 | 
        } else { 
 | 
            return String.format("%d B", size); 
 | 
        } 
 | 
    } 
 | 
    @Data 
 | 
    public static class SysFile{ 
 | 
        /** 
 | 
         * 盘符路径 
 | 
         */ 
 | 
        public String dirName; 
 | 
  
 | 
        /** 
 | 
         * 盘符类型 
 | 
         */ 
 | 
        public String sysTypeName; 
 | 
  
 | 
        /** 
 | 
         * 文件类型 
 | 
         */ 
 | 
        public String typeName; 
 | 
  
 | 
        /** 
 | 
         * 总大小 
 | 
         */ 
 | 
        public String total; 
 | 
  
 | 
        /** 
 | 
         * 剩余大小 
 | 
         */ 
 | 
        public String free; 
 | 
  
 | 
        /** 
 | 
         * 已经使用量 
 | 
         */ 
 | 
        public String used; 
 | 
  
 | 
        /** 
 | 
         * 资源的使用率 
 | 
         */ 
 | 
        public double usage; 
 | 
  
 | 
        public String toString(){ 
 | 
            StringBuilder sb = new StringBuilder() ; 
 | 
            sb.append("   磁盘" + dirName + "\n"); 
 | 
            sb.append("      盘符类型:" + sysTypeName + "\n"); 
 | 
            sb.append("      文件类型:" + typeName + "\n"); 
 | 
            sb.append("      总大小:" + total + "\n"); 
 | 
            sb.append("      剩余大小:" + free + "\n"); 
 | 
            sb.append("      已经使用量:" + used + "\n"); 
 | 
            sb.append("      资源使用率:" + usage + "\n"); 
 | 
  
 | 
            return sb.toString() ; 
 | 
        } 
 | 
    } 
 | 
} 
 |