Java中怎么通过oshi获取系统和硬件信息
发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,这篇文章将为大家详细讲解有关Java中怎么通过oshi获取系统和硬件信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java通过oshi获取系统和硬
千家信息网最后更新 2024年12月02日Java中怎么通过oshi获取系统和硬件信息
这篇文章将为大家详细讲解有关Java中怎么通过oshi获取系统和硬件信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Java通过oshi获取系统和硬件信息
OSHI是什么
OSHI是一个基于JNA的免费的本地操作系统和Java的硬件信息库。它不需要安装任何额外的本机库,旨在提供跨平台的实现来检索系统信息,如操作系统版本、进程、内存和CPU使用情况、磁盘和分区、设备、传感器等。
如何使用
添加依赖
com.github.oshi oshi-core 5.3.7
主要代码
代码主要参考
https://github.com/oshi/oshi/blob/master/oshi-core/src/test/java/oshi/SystemInfoTest.java
代码如下
package com.java.system.tool;import oshi.hardware.*;import oshi.software.os.*;import oshi.util.FormatUtil;import java.util.Arrays;import java.util.List;public class SystemInfo { public static void main(String[] args) { HardwareAbstractionLayer hardware = OshiTools.getHardware(); ComputerSystem computerSystem = hardware.getComputerSystem(); printComputerSystem(computerSystem); OperatingSystem os = OshiTools.getOs(); printOperatingSystem(os); FileSystem fileSystem = os.getFileSystem(); printFileSystem(fileSystem); CentralProcessor processor = hardware.getProcessor(); printProcessor(processor); GlobalMemory memory = hardware.getMemory(); printMemory(memory); Listprocesses = os.getProcesses(5, OperatingSystem.ProcessSort.CPU); printOSProcess(processes,memory); List diskStores = hardware.getDiskStores(); printDiskStores(diskStores); List networkIFs = hardware.getNetworkIFs(); printNetworkInterfaces(networkIFs); NetworkParams networkParams = os.getNetworkParams(); printNetworkParameters(networkParams); List usbDevices = hardware.getUsbDevices(true); printUsbDevices(usbDevices); Sensors sensors = hardware.getSensors(); printSensors(sensors); List powerSources = hardware.getPowerSources(); printPowerSources(powerSources); List displays = hardware.getDisplays(); printDisplay(displays); } public static void printComputerSystem(ComputerSystem computerSystem) { Firmware firmware = computerSystem.getFirmware(); Baseboard baseboard = computerSystem.getBaseboard(); printTools.printAll("硬件环境", Arrays.asList("硬件制造商", "硬件型号", "硬件编码"), Arrays.asList(computerSystem.getManufacturer(), computerSystem.getModel(), computerSystem.getSerialNumber())); printTools.printAll("固件信息", Arrays.asList("固件制造商", "固件名称", "固件版本", "固件说明", "固件日期"), Arrays.asList(firmware.getManufacturer(), firmware.getName(), firmware.getVersion(), firmware.getDescription(), firmware.getReleaseDate())); printTools.printAll("主板信息", Arrays.asList("主板制造商", "主板型号", "主板版本", "主板编码"), Arrays.asList(baseboard.getManufacturer(), baseboard.getModel(), baseboard.getVersion(), baseboard.getSerialNumber())); } public static void printOperatingSystem(OperatingSystem os) { printTools.printAll("操作系统", Arrays.asList("操作系统制造商", "操作系统", "操作系统进程数", "操作系统线程数", "操作系统开始时间", "操作系统位数", "操作系统结束时间"), Arrays.asList(os.getManufacturer(), String.valueOf(os.getFamily()), String.valueOf(os.getProcessCount()), String.valueOf(os.getThreadCount()), String.valueOf(os.getSystemBootTime()), String.valueOf(os.getBitness()), String.valueOf(os.getSystemUptime()))); } public static void printProcessor(CentralProcessor centralProcessor) { List keys = Arrays.asList("cpu数量", "cpu核心数", "cpu线程数", "cpu编号"); List values = Arrays.asList(String.valueOf(centralProcessor.getPhysicalPackageCount()), String.valueOf(centralProcessor.getPhysicalProcessorCount()), String.valueOf(centralProcessor.getLogicalProcessorCount()), String.valueOf(centralProcessor.getProcessorIdentifier())); printTools.printAll("中央处理器", keys, values); } public static void printMemory(GlobalMemory memory) { List keys = Arrays.asList("内存大小", "可用内存大小"); List values = Arrays.asList(FormatUtil.formatBytes(memory.getTotal()), FormatUtil.formatBytes(memory.getAvailable())); printTools.printAll("内存", keys, values); List memoryList = memory.getPhysicalMemory(); memoryList.forEach((item) -> { List keyList = Arrays.asList("内存型号", "内存规格", "内存主频", "内存大小"); List valueList = Arrays.asList(item.getManufacturer(), item.getMemoryType(), FormatUtil.formatBytes(item.getClockSpeed()), FormatUtil.formatBytes(item.getCapacity())); printTools.printAll("内存条信息", keyList, valueList); }); } public static void printUsbDevices(List usbDeviceList) { usbDeviceList.forEach((item) -> {// List keyList = Arrays.asList("Usb驱动名称", "Usb产品ID", "Usb编码", "Usb唯一设备号", "Usb供应商", "UsbUsb供应商ID");// List valueList = Arrays.asList(item.getName(), item.getProductId(), item.getSerialNumber(), item.getUniqueDeviceId(), item.getVendor(), item.getVendorId()); List keyList = Arrays.asList("Usb驱动"); List valueList = Arrays.asList(item.toString()); printTools.printAll("Usb驱动信息", keyList, valueList); }); } private static void printFileSystem(FileSystem fileSystem) { List fileStores = fileSystem.getFileStores(); fileStores.forEach((item) -> { List keyList = Arrays.asList("名称", "UUID", "盘符", "文件类型", "总大小", "剩余大小", "使用比例%"); List valueList = Arrays.asList(item.getName(), item.getUUID(), item.getMount(), item.getType(), FormatUtil.formatBytes(item.getTotalSpace()), FormatUtil.formatBytes(item.getUsableSpace()), String.valueOf(100d * item.getUsableSpace() / item.getTotalSpace())); printTools.printAll("文件存储", keyList, valueList); }); } private static void printDiskStores(List diskList) { diskList.forEach((item) -> { List keyList = Arrays.asList("名称", "型号", "序号", "大小"); List valueList = Arrays.asList(item.getName(), item.getModel(), item.getSerial(), FormatUtil.formatBytes(item.getSize())); printTools.printAll("磁盘存储", keyList, valueList); List partitions = item.getPartitions(); partitions.forEach(e->{ List keyLists = Arrays.asList("分区名称", "分区类型", "分区大小"); List valueLists = Arrays.asList(e.getName(), e.getType(),FormatUtil.formatBytesDecimal(e.getSize())); printTools.printAll("磁盘分区", keyLists, valueLists); }); }); } private static void printNetworkInterfaces(List networkIFs) { networkIFs.forEach((item) -> { List keyList = Arrays.asList("名称", "MAC", "MTU", "网速bps", "IPv4", "IPv6"); List valueList = Arrays.asList(item.getName(), item.getMacaddr(), String.valueOf(item.getMTU()), FormatUtil.formatValue(item.getSpeed(), "bps"), Arrays.toString(item.getIPv4addr()), Arrays.toString(item.getIPv6addr())); printTools.printAll("网络设置", keyList, valueList); }); } private static void printNetworkParameters(NetworkParams networkParams) { List keyList = Arrays.asList("Host", "Domain", "DNS", "IPv4", "IPv6"); List valueList = Arrays.asList(networkParams.getHostName(), networkParams.getDomainName(), Arrays.toString(networkParams.getDnsServers()), networkParams.getIpv4DefaultGateway() , networkParams.getIpv6DefaultGateway()); printTools.printAll("网络", keyList, valueList); } private static void printSensors(Sensors sensors) { List keyList = Arrays.asList("CPU温度", "风扇", "CPU电压"); List valueList = Arrays.asList(String.valueOf(sensors.getCpuTemperature()), Arrays.toString(sensors.getFanSpeeds()), String.valueOf(sensors.getCpuVoltage())); printTools.printAll("传感器", keyList, valueList); } private static void printPowerSources(List powerSources) { powerSources.stream().forEach(item -> { List keyList = Arrays.asList("电源名称", "剩余百分比"); List valueList = Arrays.asList(item.getName(), String.valueOf(item.getRemainingCapacityPercent()*100)); printTools.printAll("电源", keyList, valueList); }); } private static void printDisplay(List displays) { displays.stream().forEach(item -> { List keyList = Arrays.asList("显示"); List valueList = Arrays.asList(item.toString()); printTools.printAll("显示", keyList, valueList); }); } private static void printOSProcess(List processes,GlobalMemory memory) { processes.stream().forEach(item -> { List keyList = Arrays.asList("PID","CPU","MEM","VSZ","RSS Name"); List valueList = Arrays.asList(String.valueOf(item.getProcessID()),String.valueOf(100d * (item.getKernelTime() + item.getUserTime()) / item.getUpTime()), String.valueOf(100d * item.getResidentSetSize() / memory.getTotal()),FormatUtil.formatBytes(item.getVirtualSize()), FormatUtil.formatBytes(item.getResidentSetSize()),item.getName()); printTools.printAll("进程ID", keyList, valueList); }); }}
进阶
图形化界面参考
oshi-demo
oshi的监控指标
1、计算机系统和固件,底板2、操作系统和版本/内部版本3、物理(核心)和逻辑(超线程)CPU,处理器组,NUMA节点4、系统和每个处理器的负载百分比和滴答计数器5、CPU正常运行时间,进程和线程6、进程正常运行时间,CPU,内存使用率,用户/组,命令行7、已使用/可用的物理和虚拟内存8、挂载的文件系统(类型,可用空间和总空间)9、磁盘驱动器(型号,序列号,大小)和分区10、网络接口(IP,带宽输入/输出)11、电池状态(电量百分比,剩余时间,电量使用情况统计信息)12、连接的显示器(带有EDID信息)13、USB设备14、传感器(温度,风扇速度,电压)
关于Java中怎么通过oshi获取系统和硬件信息就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
系统
信息
操作系统
内存
硬件
大小
名称
固件
主板
型号
时间
版本
进程
制造商
磁盘
线程
制造
代码
传感器
处理器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux下代理服务器
普陀区无线网络技术管理系统
汽车网络技术论文2000字
数据库最后一个字段
关于网络安全的话语有哪些
小鼠基因组数据库
php取数据库乱码
海关月度数据库
网络安全和信息化建设举措
易语言访问数据库
易迈互联云服务器是哪里的
网络安全小常识100条句子
tidb属于mpp数据库么
网络安全办公室公务员
网络安全法第一课是什么
钩子软件开发
mysql服务器
云服务器支持的工程运营管理软件
初中生网络安全知识黑板报
互联网和高科技软件
国内云服务器厂商有哪些
广州佳骏网络技术
网络安全系统集成
网络安全投资主线
安徽八阵图互联网科技有限公司
x3450服务器cpu
小学生网络安全知识顺口溜
偶像服务器生是第几期
智慧矿山网络安全解决方案
php 数据库表