`
henryyang
  • 浏览: 111695 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

java获取windows系统信息(CPU,内存,文件系统,硬盘大小)

阅读更多

 Java怎么获取windows系统信息,如CPU,内存,文件系统,硬盘大小? java实现这些功能的确有点麻烦,没有C语言方便.java在windows这方还是弱了一点.不过麻烦是麻烦点,针对这些功能还是可以实现了,以下是 自己整理的一些公用方法.与大家分享下.

 

 private static final int CPUTIME = 500;
 private static final int PERCENT = 100;
 private static final int FAULTLENGTH = 10;

 

 // // 获取内存使用率,这个方法有点问题,不没有解决
 // public static String getMemery(){
 // // OperatingSystemMXBean osmxb = (OperatingSystemMXBean)
 // ManagementFactory.getOperatingSystemMXBean();
 // OperatingSystemMXBean osmxb = (OperatingSystemMXBean)
 // ManagementFactory.getMemoryManagerMXBeans();
 // // 总的物理内存+虚拟内存
 // long totalvirtualMemory = osmxb.getTotalSwapSpaceSize();
 // osmxb.
 // 
 // // 剩余的物理内存
 // long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize();
 // Double
 // compare=(Double)(1-freePhysicalMemorySize*1.0/totalvirtualMemory)*100;
 // String str="内存已使用:"+compare.intValue()+"%";
 // return str;
 // }

 // 获取文件系统使用率
 public static List getDisk() {
  // 操作系统
  List list = new ArrayList();
  for (char c = 'A'; c <= 'Z'; c++) {
   String dirName = c + ":/";
   File win = new File(dirName);
   if (win.exists()) {
    long total = (long) win.getTotalSpace();
    long free = (long) win.getFreeSpace();
    Double compare = (Double) (1 - free * 1.0 / total) * 100;
    String str = c + ":盘  已使用 " + compare.intValue() + "%";
    list.add(str);
   }
  }
  return list;
 }

 

 // 单位为G
 public static List getDiskToG() {
  // 操作系统
  List list = new ArrayList();
  for (char c = 'A'; c <= 'Z'; c++) {
   String dirName = c + ":/";
   File win = new File(dirName);
   if (win.exists()) {
    long total = (long) win.getTotalSpace();
    long free = (long) win.getFreeSpace();
    DecimalFormat df2 = new DecimalFormat("###0.#"); //这个方法是对数字进行转换了,大家可以研究下
    double f1 = (free / (1024.0 * 1024 * 1024)); //free的值是字符类型,所以除以1024(1024字节等于1M)
    String str = c + "盘 可用空间" + df2.format(f1) + "G";
    list.add(str);
   }
  }
  return list;
 }

 

// 获得cpu使用率
 public static String getCpuRatioForWindows() {
  try {
   String procCmd = System.getenv("windir")
     + "
\\system32\\wbem\\wmic.exe process get Caption,CommandLine,KernelModeTime,ReadOperationCount,

ThreadCount,UserModeTime,WriteOperationCount";
   // 取进程信息
   long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
   Thread.sleep(CPUTIME);
   long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
   if (c0 != null && c1 != null) {
    long idletime = c1[0] - c0[0];
    long busytime = c1[1] - c0[1];
    return "CPU使用率:"
      + Double.valueOf(
        PERCENT * (busytime) * 1.0
          / (busytime + idletime)).intValue()
      + "%";
   } else {
    return "CPU使用率:" + 0 + "%";
   }
  } catch (Exception ex) {
   ex.printStackTrace();
   return "CPU使用率:" + 0 + "%";
  }
 }

 

 

// 读取cpu相关信息
 private static long[] readCpu(final Process proc) {
  long[] retn = new long[2];
  try {
   proc.getOutputStream().close();
   InputStreamReader ir = new InputStreamReader(proc.getInputStream());
   LineNumberReader input = new LineNumberReader(ir);
   String line = input.readLine();
   if (line == null || line.length() < FAULTLENGTH) {
    return null;
   }
   int capidx = line.indexOf("Caption");
   int cmdidx = line.indexOf("CommandLine");
   int rocidx = line.indexOf("ReadOperationCount");
   int umtidx = line.indexOf("UserModeTime");
   int kmtidx = line.indexOf("KernelModeTime");
   int wocidx = line.indexOf("WriteOperationCount");
   long idletime = 0;
   long kneltime = 0;
   long usertime = 0;
   while ((line = input.readLine()) != null) {
    if (line.length() < wocidx) {
     continue;
    }
    // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
    // ThreadCount,UserModeTime,WriteOperation
    String caption = substring(line, capidx, cmdidx - 1).trim();
    String cmd = substring(line, cmdidx, kmtidx - 1).trim();
    if (cmd.indexOf("wmic.exe") >= 0) {
     continue;
    }
    String s1 = substring(line, kmtidx, rocidx - 1).trim();
    String s2 = substring(line, umtidx, wocidx - 1).trim();
    if (caption.equals("System Idle Process")
      || caption.equals("System")) {
     if (s1.length() > 0)
      idletime += Long.valueOf(s1).longValue();
     if (s2.length() > 0)
      idletime += Long.valueOf(s2).longValue();
     continue;
    }
    if (s1.length() > 0)
     kneltime += Long.valueOf(s1).longValue();
    if (s2.length() > 0)
     usertime += Long.valueOf(s2).longValue();
   }
   retn[0] = idletime;
   retn[1] = kneltime + usertime;
   return retn;
  } catch (Exception ex) {
   ex.printStackTrace();
  } finally {
   try {
    proc.getInputStream().close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return null;
 }

 

/**
  * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 包含汉字的字符串时存在隐患,现调整如下:
  *
  * @param src
  *            要截取的字符串
  * @param start_idx
  *            开始坐标(包括该坐标)
  * @param end_idx
  *            截止坐标(包括该坐标)
  * @return
  */
 private static String substring(String src, int start_idx, int end_idx) {
  byte[] b = src.getBytes();
  String tgt = "";
  for (int i = start_idx; i <= end_idx; i++) {
   tgt += (char) b[i];
  }
  return tgt;
 }

测试下:

 public static void main(String[] args) {
  System.out.println(getCpuRatioForWindows());
  // System.out.println(getMemery());
  System.out.println(getDisk());
  System.out.println(getDiskToG());

 }

0
1
分享到:
评论

相关推荐

    Java获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    "java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码" 在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过...

    Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等

    本篇文章将探讨如何利用Java获取CPU使用率、硬盘大小、网卡状态以及更广泛的系统信息。我们将主要关注一个名为"libsigar-x86-linux.so"的库文件,这是一个跨平台的系统信息获取工具——Sigar(System Information ...

    java读取服务器硬件信息(windowx+linux+Mac OS)

    在Windows环境下,Java可以通过Java Native Interface (JNI) 来调用本地API,如Kernel32.dll中的函数,获取硬件信息,例如CPU型号、内存大小等。例如,可以使用WMI(Windows Management Instrumentation)接口来查询...

    完整详细获取CPU ID,硬盘等各种硬件信息

    本文将详细探讨如何使用C#编程语言获取包括CPU ID、硬盘序列号在内的各种硬件详细信息。 首先,我们要理解CPU ID。CPU ID是处理器的一个唯一标识符,它包含了关于处理器类型、版本、速度和特性等关键信息。在C#中,...

    查看CUP、内存、硬盘使用情况

    Sigar 是一个跨平台的系统监控库,由Hypertable项目开发,提供了一种统一的方式来获取各种操作系统的信息,包括CPU、内存、硬盘使用率等。在Windows系统下,使用Sigar时,我们需要确保对应的动态链接库文件(如`lib...

    JAVA通过oshi获取系统和硬件信息

    在Java编程领域,有时我们需要获取运行环境的系统和硬件信息,比如操作系统的版本、CPU型号、内存容量等。OSHI(Operating System and Hardware Information)是一个开源的Java库,专门用于获取这些信息。本篇文章将...

    SMBIOS 获取系统硬件信息

    这个接口在现代计算机系统中扮演着至关重要的角色,它提供了详细的硬件信息,包括CPU、内存、主板以及许多其他组件的详细规格。下面将详细介绍SMBIOS以及如何通过它来获取系统硬件信息。 SMBIOS由DMI(Desktop ...

    CPU-Info.rar_cpu_java 硬件

    "CPU-Info.rar_cpu_java 硬件"这个压缩包文件显然包含了用于获取这些信息的相关工具或文档,尤其是关于CPU和硬盘的详细数据。我们将深入探讨CPU和硬盘这两个关键硬件组件。 首先,CPU(中央处理器)是计算机的...

    读取系统信息

    由于没有提供源代码,我们无法深入讨论具体实现,但通常这样的程序会使用Windows API函数,如GetVersionEx()获取操作系统版本,GetLogicalDrives()获取硬盘信息,GetSystemInfo()获取CPU和内存信息等。 为了实现...

    获取计算机主板,硬盘,CUP信息

    为了实现上述信息的获取,通常我们会使用编程语言如C#、Python或Java,调用系统API或者第三方库。例如,在Windows系统中,可以使用WMI(Windows Management Instrumentation)来查询硬件信息;在Linux系统中,可以...

    计算机软件-商业源码-获取系统硬件信息.zip

    1. **硬件信息类别**:硬件信息通常包括处理器(CPU)、内存(RAM)、硬盘(HDD/SSD)、显卡(GPU)、主板、网卡、声卡等。商业软件可能需要这些信息来优化性能、检测兼容性或提供硬件监控功能。 2. **API接口**:...

    系统与文件查看器

    例如,ManagementObjectSearcher和ManagementObjectCollection类可以用来查询并获取WMI(Windows Management Instrumentation)中的数据,这包括CPU、内存、硬盘、网络适配器等硬件信息。此外,还可能使用了...

    获取设备基础信息

    例如,在Windows中,我们可以使用WMIC(Windows Management Instrumentation Command-line)来查询硬件信息,如CPU型号、内存大小、硬盘容量等;而在Linux系统中,`/proc`目录下的文件提供了大量系统和进程信息,...

    hyperic-sigar-1.6.4.zip

    Sigar库提供了一种统一的接口,允许开发者在多种操作系统上获取诸如CPU使用率、内存状态、硬盘信息以及网络统计数据等系统级别的信息。这个"hyperic-sigar-1.6.4.zip"压缩包包含了Sigar库的1.6.4版本,适用于Linux、...

    windows xp系统命令

    5. **winmsd**:系统信息工具,可查看和报告计算机硬件和软件的详细信息,包括操作系统版本、处理器类型、内存大小等。 6. **wiaacmgr**:Windows Image Acquisition (WIA) 管理器,用于控制数字相机、扫描仪等图像...

    计算机软件-商业源码-检测磁盘容量_硬件与系统.zip

    例如,CPU信息可以通过读取BIOS或使用如`wmic`命令(Windows)或`lscpu`命令(Linux)获取。内存信息在Windows中可以使用`wmic os get TotalVisibleMemorySize,FreePhysicalMemory`,Linux下可使用`free -m`。对于...

    企业信息管理系统设计说明.doc

    硬件环境要求服务器至少配备PIII级别CPU、512M内存和20G硬盘,网络需10/100M连接,客户端需兼容IE6.0及以上版本浏览器。 三、系统分析 1. 产品介绍:系统以B/S模式运行,服务于公司全体员工,尤其对于宣传专员和总...

    JAVA缓存技术_深入了解.ppt

    操作系统的Disk Cache利用内存来存储经常访问的文件内容,减少对硬盘的I/O操作。某些特定应用可能需要自定义缓存策略,比如Oracle的raw devices和MySQL的InnoDB直接访问存储设备以提高性能。 ### 5. 数据库缓存 - ...

Global site tag (gtag.js) - Google Analytics