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

### 回答1: 你可以使用 Java 的 `java.awt.Toolkit` 类的 `getScreenSize` 方法来获取用户设备的屏幕大小。 例如: ``` import java.awt.Dimension; import java.awt.Toolkit; public class Main { public static void main(String[] args) { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double screenWidth = screenSize.getWidth(); double screenHeight = screenSize.getHeight(); System.out.println("Screen width: " + screenWidth + " pixels"); System.out.println("Screen height: " + screenHeight + " pixels"); } } ``` 你也可以使用 Java 的 `java.lang.System` 类的 `getProperty` 方法来获取关于操作系统、用户名、用户的当前工作目录等信息。例如,要获取用户名,可以使用如下代码: ``` String userName = System.getProperty("user.name"); ``` 要获取操作系统名称和版本号,可以使用如下代码: ``` String osName = System.getProperty("os.name"); String osVersion = System.getProperty("os.version"); ``` ### 回答2: 要使用Java获取用户设备信息,可以采取以下步骤: 1. 使用Java的网络编程库,例如Java.net包来获取用户的IP地址。通过获取用户的IP地址,可以大致定位用户的地理位置。 2. 通过Java的系统属性System.getProperty()方法来获取用户的操作系统信息。例如,可以使用System.getProperty("os.name")方法获取用户的操作系统名称,使用System.getProperty("os.version")方法获取操作系统版本。 3. 使用Java的System类的getenv()方法获取用户的环境变量信息。例如,通过getenv("USERPROFILE")方法可以获取用户的主目录路径,通过getenv("PROCESSOR_IDENTIFIER")方法可以获取用户的处理器标识符。 4. 使用Java的AWT(Abstract Window Toolkit)或JavaFX库来获取用户的显示器信息。通过获取显示器的分辨率、屏幕大小等信息,可以了解用户的显示器配置。 5. 借助Java的用户代理解析库,例如User-Agent-Utils或ua-parser-java,来解析用户的浏览器信息。通过获取浏览器的名称、版本号、操作系统信息等,可以了解用户所使用的浏览器和操作系统。 需要注意的是,以上步骤只能获取到用户设备的一部分信息,且获取结果可能因操作系统、硬件设备等因素而有所差异。此外,为了获取更详细的设备信息,可能需要结合其他技术手段,例如使用JavaScript来获取浏览器相关信息。 ### 回答3: 要获取用户设备信息,可以使用Java编程语言中的一些库和API来实现。下面以Android设备为例介绍如何使用Java获取用户设备信息。 1. 获取设备的型号和制造商信息: ``` String model = Build.MODEL; // 获取设备型号 String manufacturer = Build.MANUFACTURER; // 获取设备制造商 ``` 2. 获取设备操作系统版本: ``` String osVersion = System.getProperty("os.version"); ``` 3. 获取设备的唯一标识符(IMEI): 需要在AndroidManifest.xml文件中添加权限: ``` <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` 然后可以通过以下代码获取IMEI: ``` TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String imei = telephonyManager.getDeviceId(); ``` 4. 获取设备的屏幕分辨率: ``` DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels; ``` 5. 获取设备的网络连接状态: 需要在AndroidManifest.xml文件中添加权限: ``` <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ``` 然后可以通过以下代码获取网络连接状态: ``` ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 获取网络类型 int networkType = networkInfo.getType(); } ``` 除了上述方法以外,还可以使用其他类和函数来获取更多设备信息,例如获取设备的语言设置、获取设备的电池状态等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值