zhubaomin
2025-02-25 842237345ac469b02e9add8f9fd8bae5d4f7cdac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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() ;
        }
    }
}