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());
}
分享到:
相关推荐
本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...
"java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码" 在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过...
本篇文章将探讨如何利用Java获取CPU使用率、硬盘大小、网卡状态以及更广泛的系统信息。我们将主要关注一个名为"libsigar-x86-linux.so"的库文件,这是一个跨平台的系统信息获取工具——Sigar(System Information ...
在Windows环境下,Java可以通过Java Native Interface (JNI) 来调用本地API,如Kernel32.dll中的函数,获取硬件信息,例如CPU型号、内存大小等。例如,可以使用WMI(Windows Management Instrumentation)接口来查询...
本文将详细探讨如何使用C#编程语言获取包括CPU ID、硬盘序列号在内的各种硬件详细信息。 首先,我们要理解CPU ID。CPU ID是处理器的一个唯一标识符,它包含了关于处理器类型、版本、速度和特性等关键信息。在C#中,...
Sigar 是一个跨平台的系统监控库,由Hypertable项目开发,提供了一种统一的方式来获取各种操作系统的信息,包括CPU、内存、硬盘使用率等。在Windows系统下,使用Sigar时,我们需要确保对应的动态链接库文件(如`lib...
在Java编程领域,有时我们需要获取运行环境的系统和硬件信息,比如操作系统的版本、CPU型号、内存容量等。OSHI(Operating System and Hardware Information)是一个开源的Java库,专门用于获取这些信息。本篇文章将...
这个接口在现代计算机系统中扮演着至关重要的角色,它提供了详细的硬件信息,包括CPU、内存、主板以及许多其他组件的详细规格。下面将详细介绍SMBIOS以及如何通过它来获取系统硬件信息。 SMBIOS由DMI(Desktop ...
"CPU-Info.rar_cpu_java 硬件"这个压缩包文件显然包含了用于获取这些信息的相关工具或文档,尤其是关于CPU和硬盘的详细数据。我们将深入探讨CPU和硬盘这两个关键硬件组件。 首先,CPU(中央处理器)是计算机的...
由于没有提供源代码,我们无法深入讨论具体实现,但通常这样的程序会使用Windows API函数,如GetVersionEx()获取操作系统版本,GetLogicalDrives()获取硬盘信息,GetSystemInfo()获取CPU和内存信息等。 为了实现...
为了实现上述信息的获取,通常我们会使用编程语言如C#、Python或Java,调用系统API或者第三方库。例如,在Windows系统中,可以使用WMI(Windows Management Instrumentation)来查询硬件信息;在Linux系统中,可以...
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`目录下的文件提供了大量系统和进程信息,...
Sigar库提供了一种统一的接口,允许开发者在多种操作系统上获取诸如CPU使用率、内存状态、硬盘信息以及网络统计数据等系统级别的信息。这个"hyperic-sigar-1.6.4.zip"压缩包包含了Sigar库的1.6.4版本,适用于Linux、...
5. **winmsd**:系统信息工具,可查看和报告计算机硬件和软件的详细信息,包括操作系统版本、处理器类型、内存大小等。 6. **wiaacmgr**:Windows Image Acquisition (WIA) 管理器,用于控制数字相机、扫描仪等图像...
例如,CPU信息可以通过读取BIOS或使用如`wmic`命令(Windows)或`lscpu`命令(Linux)获取。内存信息在Windows中可以使用`wmic os get TotalVisibleMemorySize,FreePhysicalMemory`,Linux下可使用`free -m`。对于...
硬件环境要求服务器至少配备PIII级别CPU、512M内存和20G硬盘,网络需10/100M连接,客户端需兼容IE6.0及以上版本浏览器。 三、系统分析 1. 产品介绍:系统以B/S模式运行,服务于公司全体员工,尤其对于宣传专员和总...
操作系统的Disk Cache利用内存来存储经常访问的文件内容,减少对硬盘的I/O操作。某些特定应用可能需要自定义缓存策略,比如Oracle的raw devices和MySQL的InnoDB直接访问存储设备以提高性能。 ### 5. 数据库缓存 - ...