Java 获取CPU、内存、外网IP等硬件信息
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.URL;
import java.util.Enumeration;
import java.util.Properties; import com.sun.management.OperatingSystemMXBean; public class MachineUtils { /**
* 判断服务是否运行
* @param ProcessName 启动这个服务的进程名 带.exe
* @param ServiceName 服务名
* @return 返回运行状态
*/
public static Boolean GetServiceStatue(String ProcessName,String ServiceName) {
String temp = "";
InputStream inputStream=null;
BufferedReader bufferedReader=null;
try {
Process process = Runtime.getRuntime().exec("tasklist /svc");
inputStream = process.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"GBK"));//注意中文编码问题
while ((temp=bufferedReader.readLine())!=null){
if(temp != null && temp.contains(ServiceName) && temp.contains(ProcessName) ) {
bufferedReader.close();
inputStream.close();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(bufferedReader!=null) {
bufferedReader.close();
}
if(inputStream!=null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
} /**
* 判断服务是否安装
* @param ServiceName 服务名
* @return
*/
public static Boolean GetServiceInstallStatue(String ServiceName) {
String temp = "";
InputStream inputStream = null;
BufferedReader bufferedReader=null;
try {
Process process = Runtime.getRuntime().exec("sc query "+ServiceName);//查询服务是否安装
inputStream = process.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"GBK"));//注意中文编码问题
while ((temp=bufferedReader.readLine())!=null){
if(temp !=null && temp.contains(ServiceName)) {
bufferedReader.close();
inputStream.close();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(bufferedReader!=null) {
bufferedReader.close();
}
if(inputStream!=null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
} /**
* @param cmd cmd命令或者bat文件,bat文件获取系统权限时会有闪屏
* 获取系统权限的方法
* @echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)
cd /d "%~dp0"
ipconfig
* @return 命令输出内容
*
*/
public static String executeCmd(String cmd) {
String line = null;
BufferedReader br=null;
InputStream inputStream=null;
StringBuffer buffer=new StringBuffer();
try {
Process proc = Runtime.getRuntime().exec(cmd);// 执行命令
inputStream = proc.getInputStream();//执行结果 得到进程的标准输出信息流
br = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
while ((line = br.readLine()) != null) {
buffer.append(line+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(inputStream!=null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return buffer.toString();
} /**
* 获取mac地址
* @return
*/
public static String getLocalMac() {
StringBuffer sb = new StringBuffer();
try {
InetAddress ia = InetAddress.getLocalHost();
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
for(int i=0; i<mac.length; i++) {
if(i!=0) {
sb.append("-");
}
int temp = mac[i]&0xff;//字节转换为整数
String str = Integer.toHexString(temp);
if(str.length()==1) {
sb.append("0"+str);
}else {
sb.append(str);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString().toUpperCase();
} /**
* 获取操作系统类型
* @return
*/
public static String getOsType() {
Properties props=System.getProperties(); //获得系统属性集
String osName = props.getProperty("os.name"); //操作系统名称
//String osArch = props.getProperty("os.arch"); //操作系统构架
//String osVersion = props.getProperty("os.version"); //操作系统版本
return osName;
} /**
* 获取本地IP
* @return
*/
public static String getLocalIP(){
StringBuilder sb = new StringBuilder();
try {
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements()) {
NetworkInterface intf = (NetworkInterface) en.nextElement();
Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
while (enumIpAddr.hasMoreElements()) {
InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
sb.append(inetAddress.getHostAddress().toString()+"\n");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
} /**
* 获取外网ip和所在地
* @return
*/
public static String getRemoteIp() {
InputStream in = null;
StringBuffer buffer = new StringBuffer();
try {
// URL url = new URL("http://www.ip138.com/ip2city.asp"); //创建 URL
URL url = new URL("http://ip.chinaz.com/getip.aspx"); //创建 URL
in = url.openStream(); // 打开到这个URL的流
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String inputLine = "";
while ((inputLine = reader.readLine()) != null)
{
buffer.append(inputLine);
}
}catch (Exception e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return buffer.toString();
} /**
* 获取最大可用磁盘
* @return 返回 C D E F....
*/
public static String getMaxDisk() {
long size=0;
String max="";
File[] roots = File.listRoots();
for (File file : roots) {
if( file.getFreeSpace()>size) {
size=file.getFreeSpace();
max=file.getPath().substring(0, 1);
}
// System.out.println("Free space = " + (file.getFreeSpace()/(1024*1024))/1024); //显示GB大小
// System.out.println("Usable space = " + _file.getUsableSpace());
// System.out.println("Total space = " + _file.getTotalSpace());
// System.out.println("used space = " + (_file.getTotalSpace()-_file.getFreeSpace()));
// System.out.println();
}
System.out.println(max);
return max;
} /**
* 获取当前运行路径
* @return
*/
public static String getPath() {
File directory = new File("");//设定为当前文件夹File directory = new File("..")
String path="";
try{
path=directory.getCanonicalPath();//获取标准的路径
//path=directory.getAbsolutePath();//获取绝对路径
}catch(Exception e){ }
return path;
} /**
* 获取内存使用率
* @return
*/
public static String getMemery() {
OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long totalvirtualMemory = osmxb.getTotalSwapSpaceSize();// 总的物理内存+虚拟内存
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize(); // 剩余的物理内存
Double compare = (Double) (1 - freePhysicalMemorySize * 1.0 / totalvirtualMemory) * 100;
String str = "内存使用率:" + compare.intValue() + "%";
return str;
} /**
* 获取CPU使用率
* @return
*/
public static String getCpuRatio() {
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(200);
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(100 * (busytime) * 1.0 / (busytime + idletime)).intValue() + "%";
} else {
return "CPU使用率:" + 0 + "%";
}
} catch (Exception ex) {
ex.printStackTrace();
return "CPU使用率:" + 0 + "%";
}
}
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() < 10) {
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;
}
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;
}
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;
} }
Java 获取CPU、内存、外网IP等硬件信息的更多相关文章
- Java获得系统的外网IP
关于如何获得系统外网IP?在网上找了好久,大多数解决方案都没法直接用,所以今天和大家分享一段获得外网IP的代码! import java.net.Inet4Address; import java.n ...
- JAVA获取访问者的内网IP地址
/** * 获取访问者内网IP * @return the server ip */ public static String getIntranetIp() { // 本地IP,如果没有配置外网IP ...
- C#获取路由器外网IP,MAC地址
C#实现的获取路由器MAC地址,路由器外网地址.对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码.至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密 ...
- C#获取本机的外网IP
/// <summary> /// 功能:获取本地的外网IP地址 /// 作者:黄海 /// 时间:2016-07-22 /// </summary> /// <retu ...
- C#获取本机内网外网IP
using System.Net; # region 获取内.外网Ip /// <summary> /// 获取本地ip地址,优先取内网ip /// </summary> pu ...
- java web获取客户端外网ip和所在区域
@参考文章1.@参考文章2.@参考文章3.@参考文章4,@之前同事的项目 controller @Controller @RequestMapping("/home") publi ...
- JAVA 优先获取外网Ip,再获取内网Ip
1.获取内网Ip private String getLocalhostIp(){ String hostAddress = ""; try { InetAddress addre ...
- java获取外网ip地址
转自:http://blog.163.com/houjunchang_daxue/blog/static/13037938320134543310451/ /** * 获取外网IP.归属地.操作系统 ...
- 根据Request获取客户端IP 内网IP及外网IP
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...
随机推荐
- 1.ECS(CentOS7)主机名修改命令
命令:hostnamectl 使用--help参数查看hostnamectl里面每个参数对应的含义: [root@localhost ~]# hostnamectl --help Query or c ...
- 1.Python基础知识小结:
Python3下载地址:https://www.python.org/downloads/windows/ python3 windows安装参考地址: https://jingyan.baidu.c ...
- 将应用部署到Tomcat根目录下
方法一:(最简单直接的方法) 删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下. 方法二: 删除原webapps/ROOT 目录下的所有文件,修改文 ...
- 对于两个初始时设置为Sensor的刚体,不会触发preSolve和postSolve
Main.as package{ import Box2D.Common.Math.b2Vec2; import Box2D.Dynamics.b2Body; import Box2D.Dynamic ...
- javascript 模拟java 实现继承的5种方式
1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function(){ alert(t ...
- 初识Swift中的值和引用,循坏引用、代理的注意点
1.0 在Swift中分有值类型和引用类型 Int .String . 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本:这样我们就可以随心所欲修改它,而不用担心 ...
- linux基本之一
1.目录棉集 / 根目录,理论上讲系统中的一切都属于他. /bin 存放所有用户都能执行的命令(二进制) /boot 存放启动文件/内核的相关文件,一般独立成为一个分区. /dev 存放物理设备的目录 ...
- Java中构造函数传参数在基本数据类型和引用类型之间的区别
Java中构造函数传参数在基本数据类型和引用类型的区别 如果构造函数中穿的参数为基本数据类型,如果在函数中没有返回值,在调用的时候不会发生改变:而如果是引用类型,改变的是存储的位置,所有不管有没有返回 ...
- Bootstrap Popover
[Bootstrap Popover] 1.设置一个popover需要添加以下设置: 1)data-toggle="popover" 2)title="Example p ...
- 媒体类型 & 媒体查询
[媒体类型 & 媒体查询] @media 规则允许在相同样式表为不同媒体设置不同的样式. 在下面的例子告诉我们浏览器屏幕上显示一个14像素的Verdana字体样式.但是如果页面打印,将是10个 ...