【项目实战】SpringBoot整合Oshi实现访问计算机硬件和操作系统信息
一、Oshi入门介绍
本项目主要使用第开源jar包:https://github.com/oshi/oshi
Oshi是一个免费且开源的Java库,提供了一种访问计算机硬件和操作系统信息的方式。
Oshi是一个跨平台的Java库,提供了获取操作系统信息(比如CPU、内存、磁盘)的API。
Oshi支持多种操作系统,包括Windows、Linux、macOS和Solaris。
Oshi可以在Windows、Linux、MacOS等多种操作系统上获取系统信息,支持x86、x86_64、ARM等多种架构。
二、Oshi能获取到的信息汇总
Java可以通过Oshi获取系统和硬件信息,方便地获取各种系统信息
- CPU信息:CPU核心数、CPU占用率、CPU型号等。
- 内存信息:总内存大小、可用内存大小、内存使用率等。
- 磁盘信息:磁盘总大小、已使用磁盘大小、磁盘读写速度等。
- 网络信息:网络带宽、网络流量等。
三 、Oshi如何使用?
要在Java项目中使用Oshi,Oshi提供了一系列API可以获取以上信息,您可以将以下依赖项添加到pom.xml文件中:
<dependency><groupId>com.github.oshigroupId><artifactId>oshi-coreartifactId><version>5.7.4version>
dependency>
添加依赖项后,您可以使用Oshi访问计算机的硬件和操作系统信息。
3.1 使用场景1:获取有关操作系统的信息
使用SystemInfo类获取有关操作系统的信息, 例如版本和架构:
import oshi.SystemInfo;public class Example {public static void main(String[] args) {SystemInfo systemInfo = new SystemInfo();System.out.println("操作系统: " + systemInfo.getOperatingSystem().getVersion());System.out.println("架构: " + systemInfo.getHardware().getProcessor().getArch());}
}
3.2 使用场景2:获取有关硬件的信息
例如CPU、内存和磁盘。
例如,您可以使用HardwareAbstractionLayer类获取有关CPU的信息:
import oshi.SystemInfo;public class Example {public static void main(String[] args) {SystemInfo systemInfo = new SystemInfo();System.out.println("CPU: " + systemInfo.getHardware().getProcessor().getName());System.out.println("物理核心数: " + systemInfo.getHardware().getProcessor().getPhysicalProcessorCount());System.out.println("逻辑核心数: " + systemInfo.getHardware().getProcessor().getLogicalProcessorCount());}
}
3.3 使用场景3:获取CPU信息
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;SystemInfo systemInfo = new SystemInfo();
CentralProcessor processor = systemInfo.getHardware().getProcessor();
int logicalProcessorCount = processor.getLogicalProcessorCount();
String cpuModel = processor.getProcessorIdentifier().getName();
double systemCpuLoad = processor.getSystemCpuLoad();
3.4 使用场景4:获取内存信息
import oshi.SystemInfo;
import oshi.hardware.GlobalMemory;SystemInfo systemInfo = new SystemInfo();
GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalMemorySize = memory.getTotal();
long availableMemorySize = memory.getAvailable();
double memoryUsage = (totalMemorySize - availableMemorySize) * 100.0 / totalMemorySize;
3.5 使用场景5:获取磁盘信息
import oshi.SystemInfo;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.FileSystem;
import oshi.software.os.OSFileStore;SystemInfo systemInfo = new SystemInfo();
HardwareAbstractionLayer hal = systemInfo.getHardware();
FileSystem fileSystem = systemInfo.getOperatingSystem().getFileSystem();
OSFileStore[] fileStores = fileSystem.getFileStores();
for (OSFileStore store : fileStores) {long totalSpace = store.getTotalSpace();long usableSpace = store.getUsableSpace();double usage = (totalSpace - usableSpace) * 100.0 / totalSpace;
}
3.6 使用场景6:获取网络信息
import oshi.SystemInfo;
import oshi.hardware.NetworkIF;SystemInfo systemInfo = new SystemInfo();
NetworkIF[] networkIFs = systemInfo.getHardware().getNetworkIFs();
for (NetworkIF networkIF : networkIFs) {String name = networkIF.getName();long receiveBytes = networkIF.getBytesRecv();long transmitBytes = networkIF.getBytesSent();
}
三 、参考链接
https://www.cnblogs.com/songxingzhu/p/9107878.html
https://blog.csdn.net/qq_41609208/article/details/105856260
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
