v1.0.0
效果
剩余总大小:980.03469085693359375GB
硬盘总大小:1155.080066680908203125GB
代码
引入依赖
<oshi.version>3.9.1</oshi.version>
... ...
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>${oshi.version}</version>
</dependency>
逻辑
- Disk.java
import lombok.Data;
import java.math.BigDecimal;
/**
* 功能:磁盘
*
* @author: cc
* @qq: 8416837
* @date: 2021/5/27 16:22
*/
@Data
public class Disk {
/**
* 剩余空间
*/
private BigDecimal free;
private BigDecimal total;
private BigDecimal used;
private String remain;
/**
* 使用的百分比
*/
private String usedPercent;
}
- Hardware.java
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import oshi.SystemInfo;
import oshi.software.os.FileSystem;
import oshi.software.os.OSFileStore;
import oshi.software.os.OperatingSystem;
import java.math.BigDecimal;
/**
* 功能:硬件检测
*
* @author: cc
* @qq: 8416837
* @date: 2021/5/27 16:23
*/
public class Hardware{
/**
* 功能描述: 获取硬件之磁盘
* @param: []
* @return: com.cc.common.utils.Disk
* @qq: 8416837
* @author: cc
* @date: 2021/5/27
*/
public static Disk getDiskInfo() {
// 初始化
Disk disk = new Disk();
BigDecimal total = new BigDecimal("0");
BigDecimal free = new BigDecimal("0");
BigDecimal used;
String remain = "0%";
String usedPercent = "0%";
// 系统信息
SystemInfo si = new SystemInfo();
OperatingSystem os = si.getOperatingSystem();
FileSystem fileSystem = os.getFileSystem();
OSFileStore[] fsArray = fileSystem.getFileStores();
for (OSFileStore fs : fsArray) {
total = total.add(new BigDecimal(fs.getTotalSpace()));
free = free.add(new BigDecimal(fs.getUsableSpace())); // 可用
}
used = total.subtract(free);
String freeGB = transBit2GB(free);
String totalGB = transBit2GB(total);
System.out.println(String.format("剩余总大小:%s", freeGB));
System.out.println(String.format("硬盘总大小:%s", totalGB));
boolean dividendIsNotZero = total.compareTo(new BigDecimal("0")) != 0; // 除数不为0
if (dividendIsNotZero) {
Float remainFloat = Float.valueOf(free.divide(new BigDecimal(1073741824F)) + StringPool.EMPTY) /
Float.valueOf(total.divide(new BigDecimal(1073741824F)) + StringPool.EMPTY);
remain = remainFloat * 100 + StringPool.PERCENT;
usedPercent = (1F - remainFloat) * 100 + StringPool.PERCENT;
// remain = (free.divide(total) ).multiply(new BigDecimal(100F)) + StringPool.PERCENT;
}
disk.setTotal(total);
disk.setFree(free);
disk.setUsed(used);
disk.setRemain(remain);
disk.setUsedPercent(usedPercent);
return disk;
}
/**
* 功能描述: 位转GB
* @param: [size:位数值]
* @return: java.lang.String
* @qq: 8416837
* @author: cc
* @date: 2021/5/27
*/
private static String transBit2GB(BigDecimal size) {
return size.divide(new BigDecimal(1073741824F)) + "GB";
}
public static void main(String[] args) {
// 测试磁盘工具
getDiskInfo();
}
}