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等硬件信息的更多相关文章

  1. Java获得系统的外网IP

    关于如何获得系统外网IP?在网上找了好久,大多数解决方案都没法直接用,所以今天和大家分享一段获得外网IP的代码! import java.net.Inet4Address; import java.n ...

  2. JAVA获取访问者的内网IP地址

    /** * 获取访问者内网IP * @return the server ip */ public static String getIntranetIp() { // 本地IP,如果没有配置外网IP ...

  3. C#获取路由器外网IP,MAC地址

    C#实现的获取路由器MAC地址,路由器外网地址.对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码.至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密 ...

  4. C#获取本机的外网IP

    /// <summary> /// 功能:获取本地的外网IP地址 /// 作者:黄海 /// 时间:2016-07-22 /// </summary> /// <retu ...

  5. C#获取本机内网外网IP

    using System.Net; # region 获取内.外网Ip /// <summary> /// 获取本地ip地址,优先取内网ip /// </summary> pu ...

  6. java web获取客户端外网ip和所在区域

    @参考文章1.@参考文章2.@参考文章3.@参考文章4,@之前同事的项目 controller @Controller @RequestMapping("/home") publi ...

  7. JAVA 优先获取外网Ip,再获取内网Ip

    1.获取内网Ip private String getLocalhostIp(){ String hostAddress = ""; try { InetAddress addre ...

  8. java获取外网ip地址

    转自:http://blog.163.com/houjunchang_daxue/blog/static/13037938320134543310451/ /** * 获取外网IP.归属地.操作系统 ...

  9. 根据Request获取客户端IP 内网IP及外网IP

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

随机推荐

  1. SecureCRT使用本地公钥 SSH 免密码登录Linux

    其原理与Linux系统之间的SSH通道原理是一样的 下文中如果创建公钥的格式是:标准公钥和VanDyke私钥格式,需要用ssh-keygen -i -f 转换.如果是OpenSSH密钥格式可直接修改文 ...

  2. Python爬虫示例

    #!/usr/bin/python #coding:utf8 import re import urllib def gethtml(url): page=urllib.urlopen(url) ht ...

  3. HTML实现页面自动跳转的五种方法

    下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件. 1)html的实现 复制代码 代码如下: <head> ...

  4. js版RSA算法

    // RSA, a suite of routines for performing RSA public-key computations in// JavaScript.//// Requires ...

  5. List,Set,Map集合的遍历方法

    List的三种实现:ArrayList(数组)  LinkedList(链表)  Vector(线程安全) List集合遍历方法: List<String> list = new Arra ...

  6. 前端路由两种模式:hash、history

    随着 ajax 的使用越来越广泛,前端的页面逻辑开始变得越来越复杂,特别是spa的兴起,前端路由系统随之开始流行. 从用户的角度看,前端路由主要实现了两个功能(使用ajax更新页面状态的情况下): 记 ...

  7. idea 热部署之JRebel安装-激活-简单使用(修改方法\配置文件均生效)

    1.简介 JRebel插件在IntelliJ IDEA中用于代码的热部署,即工程在已经启动的状态下修改代码,可以不用再重启服务,JRebel插件会自动帮我们编译代码,然后重启.整个重启的过程耗时非常短 ...

  8. 数据持久化PlayerPrefs

    1.Unity3D中的数据持久化是以键值对的形式存储的,可以看作是一个字典 2.Unity3D中的值是通过键名来读取的,当值不存在时,返回默认值 3.在Unity中只支持int.float.strin ...

  9. NO_DATA_FOUND ORACL NVL函数,当第一个为空时显示第二个参数值

    ORA-01403: no data foundORA-06512: at "STG.SAP_SO_QM_CUSTOMER_ADDBOM", line 50 NVL函数的格式如下: ...

  10. DIV实现垂直居中的几种方法

    说道垂直居中,我们首先想到的是vertical-align属性,但是许多时候该属性并不起作用.例如,下面的样式并不能达到内容垂直居中显示 div { width:200px; height:300px ...