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下载地址

目录
相关文章
|
6月前
|
前端开发 Java 数据库连接
Java代码打造的注册系统
Java代码打造的注册系统
58 0
|
5月前
|
Java API 调度
为什么写Java程序需要接口
为什么写Java程序需要接口
26 2
|
6月前
|
Java API
Java 接口
5月更文挑战第6天
|
Java 定位技术
109.【Java最全腾讯地图接口】(一)
109.【Java最全腾讯地图接口】
235 1
|
12月前
|
移动开发 监控 Java
JAVA获取系统相关的信息
JAVA获取系统相关的信息
49 0
|
Java
Java 接口组成与更新详解
在Java编程中,接口(interface)是一种非常重要的概念。它允许类定义一组抽象方法,这些方法可以在不同的类中实现。接口在Java中起到了重要的角色,被广泛应用于代码的组织和设计中。本文将详细解释Java接口的组成和最新的更新,包括默认方法、静态方法、私有方法以及接口的使用场景。
97 1
|
Java 定位技术
109.【Java最全腾讯地图接口】(三)
109.【Java最全腾讯地图接口】
128 1
|
网络协议 Java 程序员
109.【Java最全腾讯地图接口】(二)
109.【Java最全腾讯地图接口】
114 1
|
存储 JSON Java
109.【Java最全腾讯地图接口】(四)
109.【Java最全腾讯地图接口】
130 1
|
Java
【Java】接口组成更新
【Java】接口组成更新
126 0