| 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() ; | 
|         } | 
|     } | 
| } |