JAVA获得设备信息

简介:

做JAVA开发时,可能会获得设备的一些信息,比如CPU、内存,做一些监控等,今天介绍一种JAVA获得设备信息的方式,使用的第三方包为sigar.jar(根据操作系统类型,还要添加对应的动态链接库)。
代码如下:

import java.net.InetAddress;
import java.util.Set;
import java.util.TreeSet;

import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.Swap;

/**
 * 设备信息工具类
 * 
 * @author gjjiang
 * 
 */
public class DeviceUtils
{
   /** sigar对象,用于获得设备信息 **/
   private Sigar sigar = null;

   /**
    * 初始化方法
    */
   public DeviceUtils()
   {
      sigar = new Sigar();
   }

   /**
    * 关闭,释放sigar相关资源
    */
   public void close()
   {
      sigar.close();
   }

   /**
    * 获得CPU信息
    * 
    * @return
    * @throws SigarException
    */
   public CpuInfo[] getCpuInfo() throws SigarException
   {
      return sigar.getCpuInfoList();
   }

   /**
    * 获得内存信息
    * 
    * @return
    * @throws SigarException
    */
   public Mem getMem() throws SigarException
   {
      return sigar.getMem();
   }

   /**
    * 获得系统页面文件交换区信息
    * 
    * @return
    * @throws SigarException
    */
   public Swap getSwap() throws SigarException
   {
      return sigar.getSwap();
   }

   /**
    * 取到当前操作系统的名称
    * 
    * @return
    */
   public String getHostName()
   {
      String hostname = "";
      try
      {
         hostname = InetAddress.getLocalHost().getHostName();
      }
      catch (Exception exc)
      {
         try
         {
            hostname = sigar.getNetInfo().getHostName();
         }
         catch (SigarException e)
         {
            hostname = "unknown";
         }
      }
      return hostname;
   }

   /**
    * 获得操作系统信息
    * 
    * @return
    */
   public OperatingSystem getOSInfo()
   {
      return OperatingSystem.getInstance();
   }

   /**
    * 获取文件系统信息
    * 
    * @throws SigarException
    */
   public FileSystem[] getFileSystemInfo() throws SigarException
   {
      return sigar.getFileSystemList();
      // FileSystem fs = fslist[i];
      // // 分区的盘符名称
      // print("fs.getDevName() = " + fs.getDevName());
      // // 分区的盘符名称
      // print("fs.getDirName() = " + fs.getDirName());
      // print("fs.getFlags() = " + fs.getFlags());//
      // // 文件系统类型,比如 FAT32、NTFS
      // print("fs.getSysTypeName() = " + fs.getSysTypeName());
      // // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
      // print("fs.getTypeName() = " + fs.getTypeName());
      // // 文件系统类型
      // print("fs.getType() = " + fs.getType());
      // FileSystemUsage usage = null;
      // try {
      // usage = sigar.getFileSystemUsage(fs.getDirName());
      // } catch (SigarException e) {
      // if (fs.getType() == 2)
      // throw e;
      // continue;
      // }
      // switch (fs.getType()) {
      // case 0: // TYPE_UNKNOWN :未知
      // break;
      // case 1: // TYPE_NONE
      // break;
      // case 2: // TYPE_LOCAL_DISK : 本地硬盘
      // // 文件系统总大小
      // print(" Total = " + usage.getTotal() + "KB");
      // // 文件系统剩余大小
      // print(" Free = " + usage.getFree() + "KB");
      // // 文件系统可用大小
      // print(" Avail = " + usage.getAvail() + "KB");
      // // 文件系统已经使用量
      // print(" Used = " + usage.getUsed() + "KB");
      // double usePercent = usage.getUsePercent() * 100D;
      // // 文件系统资源的利用率
      // print(" Usage = " + usePercent + "%");
      // break;
      // case 3:// TYPE_NETWORK :网络
      // break;
      // case 4:// TYPE_RAM_DISK :闪存
      // break;
      // case 5:// TYPE_CDROM :光驱
      // break;
      // case 6:// TYPE_SWAP :页面交换
      // break;
      // }
   }

   public FileSystemUsage getFileSystemUsage(String dirName)
         throws SigarException
   {
      return sigar.getFileSystemUsage(dirName);
   }

   /**
    * 获得网卡Mac地址
    * 
    * @return
    * @throws SigarException
    */
   public Set<String> getMacs() throws SigarException
   {
      TreeSet<String> treeSet = new TreeSet<String>();
      String[] list = sigar.getNetInterfaceList();
      for (String string : list)
      {
         String mac = sigar.getNetInterfaceConfig(string).getHwaddr();
         if (mac != null)
         {
            treeSet.add(mac);
         }
      }
      return treeSet;
   }
}

sigar下载地址

目录
相关文章
|
Linux 网络安全 开发工具
Linux安装ssh以远程连接
Linux安装ssh以远程连接
1529 0
|
存储 安全 Java
settings.xml详解(很详细读这一篇就够了)
settings.xml是Java项目中用于配置Maven的重要文件,它详细规定了Maven的运行规则和行为。该文件通常位于用户家目录下的.m2文件夹中,或者项目根目录下的.mvn文件夹内。settings.xml中包含了众多配置项,从代理设置、镜像仓库配置,到服务器认证信息、插件组等,均可以在此文件中进行细致定义。通过合理配置settings.xml,我们可以优化Maven的依赖下载速度,保障仓库访问的安全性,甚至实现私有仓库的搭建与管理。深入了解settings.xml的每一项配置,对于提高Maven使用效率、保障项目构建稳定性具有重要意义。因此,无论是Maven初学者还是资深用户,都应仔
14141 3
|
SQL 前端开发 JavaScript
基于java+springboot的外卖点餐网站、外卖点餐管理系统
该系统是基于java+springboot开发的外卖点餐网站、外卖点餐管理系统。是给师弟开发的课程作业。运行过程中的问题,可以在github咨询作者。
273 0
|
消息中间件 并行计算 Java
Python中的并发编程
本文介绍了Python中的并发编程,并具体介绍了线程、进程、协程的基本用法和案例。
220 2
Python中的并发编程
|
存储 网络协议 网络安全
什么是 Active Directory?
【8月更文挑战第4天】
1005 10
|
SQL 数据可视化 前端开发
简单好用的ElasticSearch可视化工具:es-client和Head
使用 ElasticSearch(简称 es) 的过程中,经常有一些临时查询(如 排查问题、验证效果),一个趁手的可视化工具 可以提高工作效率。个人倾向于 免费(最好开源)、易于安装(如 浏览器插件),`es-client` 就是 比较简单好用的一个,尤其是 查询
11431 0
|
存储 Kubernetes API
在K8S中,陈述⼀下创建Pod的流程?
在K8S中,陈述⼀下创建Pod的流程?
|
应用服务中间件 API nginx
|
Cloud Native 虚拟化 数据安全/隐私保护
云原生网络中的微隔离
【2月更文挑战第24天】
|
自然语言处理 数据可视化 算法
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
1555 1
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!

热门文章

最新文章