Java + OSHI 实战:从零搭建企业级电脑硬件信息检测
作为一名信息处理员,想必都遇到过这类 “重复劳动” 的场景:经理:“小白,把公司所有电脑的硬件信息统计一下,做个固定资产盘点表。”如果手动去每台电脑上看「设备管理器」「系统信息」,不仅要反复操作相同步骤,还容易漏记、错记,几百台设备得耗上几天,效率低到离谱。为了解决这个痛点,我调研了多款硬件信息采集方案,最终选择Java + OSHI技术栈,快速开发出一款可批量采集、导出的硬件信息检测工具,完美完成了固定资产盘点任务。先上结果:开发环境:java 1.8.0_462 +OSHI 6.4.0开发工具:IntelliJ IDEA 2025.3.2依赖环境:!-- OSHI 硬件信息依赖 -- dependency groupIdcom.github.oshi/groupId artifactIdoshi-core/artifactId version6.4.0/version /dependency关键代码块:1、系统信息模块:private JPanel createSystemInfoPanel() { JPanel panel = new JPanel(new BorderLayout()); String[] columnNames = {"属性", "值"}; DefaultTableModel model = new DefaultTableModel(columnNames, 0); // 系统基础信息 model.addRow(new Object[]{"操作系统家族", os.getFamily()}); model.addRow(new Object[]{"操作系统版本", os.getVersionInfo().getVersion()}); model.addRow(new Object[]{"系统架构", os.getBitness() + " 位"}); model.addRow(new Object[]{"当前登录用户", System.getProperty("user.name")}); // 手动将秒级时间戳转Date格式化,避免OSHI API兼容问题 model.addRow(new Object[]{ "系统启动时间", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(os.getSystemBootTime() * 1000L)) }); // 表格样式配置 JTable table = new JTable(model); table.setRowHeight(25); table.getColumnModel().getColumn(0).setPreferredWidth(150); table.getColumnModel().getColumn(1).setPreferredWidth(300); panel.add(new JScrollPane(table), BorderLayout.CENTER); return panel; }2、CPU信息面板:private JPanel createCpuInfoPanel() { JPanel panel = new JPanel(new BorderLayout()); String[] columnNames = {"属性", "值"}; DefaultTableModel model = new DefaultTableModel(columnNames, 0); CentralProcessor cpu = hal.getProcessor(); CentralProcessor.ProcessorIdentifier cpuId = cpu.getProcessorIdentifier(); // CPU基础信息 model.addRow(new Object[]{"CPU型号", cpuId.getName()}); model.addRow(new Object[]{"CPU厂商", cpuId.getVendor()}); model.addRow(new Object[]{"物理核心数", cpu.getPhysicalProcessorCount()}); model.addRow(new Object[]{"逻辑核心数", cpu.getLogicalProcessorCount()}); model.addRow(new Object[]{"最大频率", FormatUtil.formatHertz(cpu.getMaxFreq())}); model.addRow(new Object[]{"CPU缓存(L1/L2/L3)", "OSHI 6.4.0 暂不支持获取"}); // CPU负载 try { long[] prevTicks = cpu.getSystemCpuLoadTicks(); Thread.sleep(100); // 等待100ms采集负载数据 double load = cpu.getSystemCpuLoadBetweenTicks(prevTicks); model.addRow(new Object[]{"CPU负载(实时)", String.format("%.2f%%", load * 100)}); } catch (InterruptedException e) { model.addRow(new Object[]{"CPU负载(实时)", "获取失败"}); Thread.currentThread().interrupt(); } // 表格样式配置 JTable table = new JTable(model); table.setRowHeight(25); table.getColumnModel().getColumn(0).setPreferredWidth(150)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412547.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!