clean history

This commit is contained in:
Looly
2019-08-14 10:02:32 +08:00
commit 6b011af032
1215 changed files with 159913 additions and 0 deletions

24
hutool-system/pom.xml Normal file
View File

@@ -0,0 +1,24 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId>
<version>4.6.2-SNAPSHOT</version>
</parent>
<artifactId>hutool-system</artifactId>
<name>${project.artifactId}</name>
<description>Hutool 系统调用Runtime</description>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,75 @@
package cn.hutool.system;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 代表当前主机的信息。
*/
public class HostInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String HOST_NAME;
private final String HOST_ADDRESS;
public HostInfo() {
String hostName;
String hostAddress;
try {
InetAddress localhost = InetAddress.getLocalHost();
hostName = localhost.getHostName();
hostAddress = localhost.getHostAddress();
} catch (UnknownHostException e) {
hostName = "localhost";
hostAddress = "127.0.0.1";
}
HOST_NAME = hostName;
HOST_ADDRESS = hostAddress;
}
/**
* 取得当前主机的名称。
*
* <p>
* 例如:<code>"webserver1"</code>
* </p>
*
* @return 主机名
*/
public final String getName() {
return HOST_NAME;
}
/**
* 取得当前主机的地址。
*
* <p>
* 例如:<code>"192.168.0.1"</code>
* </p>
*
* @return 主机地址
*/
public final String getAddress() {
return HOST_ADDRESS;
}
/**
* 将当前主机的信息转换成字符串。
*
* @return 主机信息的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "Host Name: ", getName());
SystemUtil.append(builder, "Host Address: ", getAddress());
return builder.toString();
}
}

View File

@@ -0,0 +1,393 @@
package cn.hutool.system;
import cn.hutool.core.util.ReUtil;
import java.io.Serializable;
/**
* 代表Java Implementation的信息。
*/
public class JavaInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String JAVA_VERSION = SystemUtil.get("java.version", false);
private final float JAVA_VERSION_FLOAT = getJavaVersionAsFloat();
private final int JAVA_VERSION_INT = getJavaVersionAsInt();
private final String JAVA_VENDOR = SystemUtil.get("java.vendor", false);
private final String JAVA_VENDOR_URL = SystemUtil.get("java.vendor.url", false);
// 1.1--1.3能否识别?
private final boolean IS_JAVA_1_1 = getJavaVersionMatches("1.1");
private final boolean IS_JAVA_1_2 = getJavaVersionMatches("1.2");
private final boolean IS_JAVA_1_3 = getJavaVersionMatches("1.3");
private final boolean IS_JAVA_1_4 = getJavaVersionMatches("1.4");
private final boolean IS_JAVA_1_5 = getJavaVersionMatches("1.5");
private final boolean IS_JAVA_1_6 = getJavaVersionMatches("1.6");
private final boolean IS_JAVA_1_7 = getJavaVersionMatches("1.7");
private final boolean IS_JAVA_1_8 = getJavaVersionMatches("1.8");
private final boolean IS_JAVA_9 = getJavaVersionMatches("9");
private final boolean IS_JAVA_10 = getJavaVersionMatches("10");
private final boolean IS_JAVA_11 = getJavaVersionMatches("11");
private final boolean IS_JAVA_12 = getJavaVersionMatches("12");
/**
* 取得当前Java impl.的版本(取自系统属性:<code>java.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"1.4.2"</code>
*
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getVersion() {
return JAVA_VERSION;
}
/**
* 取得当前Java impl.的版本(取自系统属性:<code>java.version</code>)。
*
* <p>
* 例如:
*
* <ul>
* <li>JDK 1.2<code>1.2f</code>。</li>
* <li>JDK 1.3.1<code>1.31f</code></li>
* </ul>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>0</code>。
*/
public final float getVersionFloat() {
return JAVA_VERSION_FLOAT;
}
/**
* 取得当前Java impl.的版本(取自系统属性:<code>java.version</code>java10及其之后的版本返回值为4位。
*
* <p>
* 例如:
*
* <ul>
* <li>JDK 1.2<code>120</code>。</li>
* <li>JDK 1.3.1<code>131</code></li>
* <li>JDK 11.0.2<code>1102</code></li>
* </ul>
*
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>0</code>。
*
* @since Java 1.1
*/
public final int getVersionInt() {
return JAVA_VERSION_INT;
}
/**
* 取得当前Java impl.的版本的<code>float</code>值。
*
* @return Java版本的<code>float</code>值或<code>0</code>
*/
private final float getJavaVersionAsFloat() {
if (JAVA_VERSION == null) {
return 0f;
}
String str = JAVA_VERSION;
str = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2})?", str,0);
return Float.parseFloat(str);
}
/**
* 取得当前Java impl.的版本的<code>int</code>值。
*
* @return Java版本的<code>int</code>值或<code>0</code>
*/
private final int getJavaVersionAsInt() {
if (JAVA_VERSION == null) {
return 0;
}
String java_version = JAVA_VERSION;
java_version = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2}){0,2}", java_version,0);
String[] split = java_version.split("\\.");
String result = "";
for (int i = 0; i < split.length; i++) {
result = result + split[i];
}
//保证java10及其之后的版本返回的值为4位
if (split[0].length()>1 && result.length()!=4){
result = result + "0000";
result = result.substring(0,4);
}
return Integer.parseInt(result);
}
/**
* 取得当前Java impl.的厂商(取自系统属性:<code>java.vendor</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Sun Microsystems Inc."</code>
*
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getVendor() {
return JAVA_VENDOR;
}
/**
* 取得当前Java impl.的厂商网站的URL取自系统属性<code>java.vendor.url</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"http://java.sun.com/"</code>
*
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getVendorURL() {
return JAVA_VENDOR_URL;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.1,则返回<code>true</code>
*/
public final boolean isJava1_1() {
return IS_JAVA_1_1;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.2,则返回<code>true</code>
*/
public final boolean isJava1_2() {
return IS_JAVA_1_2;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.3,则返回<code>true</code>
*/
public final boolean isJava1_3() {
return IS_JAVA_1_3;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.4,则返回<code>true</code>
*/
public final boolean isJava1_4() {
return IS_JAVA_1_4;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.5,则返回<code>true</code>
*/
public final boolean isJava1_5() {
return IS_JAVA_1_5;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.6,则返回<code>true</code>
*/
public final boolean isJava1_6() {
return IS_JAVA_1_6;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.7,则返回<code>true</code>
*/
public final boolean isJava1_7() {
return IS_JAVA_1_7;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为1.8,则返回<code>true</code>
*/
public final boolean isJava1_8() {
return IS_JAVA_1_8;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为9则返回<code>true</code>
*/
public final boolean isJava9() {
return IS_JAVA_9;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为10则返回<code>true</code>
*/
public final boolean isJava10() {
return IS_JAVA_10;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为11则返回<code>true</code>
*/
public final boolean isJava11() {
return IS_JAVA_11;
}
/**
* 判断当前Java的版本。
*
* <p>
* 如果不能取得系统属性<code>java.version</code>因为Java安全限制则总是返回 <code>false</code>
*
*
* @return 如果当前Java版本为12则返回<code>true</code>
*/
public final boolean isJava12() {
return IS_JAVA_12;
}
/**
* 匹配当前Java的版本。
*
* @param versionPrefix Java版本前缀
*
* @return 如果版本匹配,则返回<code>true</code>
*/
private final boolean getJavaVersionMatches(String versionPrefix) {
if (JAVA_VERSION == null) {
return false;
}
return JAVA_VERSION.startsWith(versionPrefix);
}
/**
* 判定当前Java的版本是否大于等于指定的版本号。
*
* <p>
* 例如:
*
*
* <ul>
* <li>测试JDK 1.2<code>isJavaVersionAtLeast(1.2f)</code></li>
* <li>测试JDK 1.2.1<code>isJavaVersionAtLeast(1.31f)</code></li>
* </ul>
*
*
* @param requiredVersion 需要的版本
*
* @return 如果当前Java版本大于或等于指定的版本则返回<code>true</code>
*/
public final boolean isJavaVersionAtLeast(float requiredVersion) {
return getVersionFloat() >= requiredVersion;
}
/**
* 判定当前Java的版本是否大于等于指定的版本号。
*
* <p>
* 例如:
*
*
* <ul>
* <li>测试JDK 1.2<code>isJavaVersionAtLeast(120)</code></li>
* <li>测试JDK 1.2.1<code>isJavaVersionAtLeast(131)</code></li>
* </ul>
*
*
* @param requiredVersion 需要的版本
*
* @return 如果当前Java版本大于或等于指定的版本则返回<code>true</code>
*/
public final boolean isJavaVersionAtLeast(int requiredVersion) {
return getVersionInt() >= requiredVersion;
}
/**
* 将Java Implementation的信息转换成字符串。
*
* @return JVM impl.的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "Java Version: ", getVersion());
SystemUtil.append(builder, "Java Vendor: ", getVendor());
SystemUtil.append(builder, "Java Vendor URL: ", getVendorURL());
return builder.toString();
}
}

View File

@@ -0,0 +1,225 @@
package cn.hutool.system;
import java.io.Serializable;
import cn.hutool.core.util.StrUtil;
/**
* 代表当前运行的JRE的信息。
*/
public class JavaRuntimeInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String JAVA_RUNTIME_NAME = SystemUtil.get("java.runtime.name", false);
private final String JAVA_RUNTIME_VERSION = SystemUtil.get("java.runtime.version", false);
private final String JAVA_HOME = SystemUtil.get("java.home", false);
private final String JAVA_EXT_DIRS = SystemUtil.get("java.ext.dirs", false);
private final String JAVA_ENDORSED_DIRS = SystemUtil.get("java.endorsed.dirs", false);
private final String JAVA_CLASS_PATH = SystemUtil.get("java.class.path", false);
private final String JAVA_CLASS_VERSION = SystemUtil.get("java.class.version", false);
private final String JAVA_LIBRARY_PATH = SystemUtil.get("java.library.path", false);
private final String SUN_BOOT_CLASS_PATH = SystemUtil.get("sun.boot.class.path", false);
private final String SUN_ARCH_DATA_MODEL = SystemUtil.get("sun.arch.data.model", false);
public final String getSunBoothClassPath() {
return SUN_BOOT_CLASS_PATH;
}
/**
* JVM is 32M <code>or</code> 64M
*
* @return 32 <code>or</code> 64
*/
public final String getSunArchDataModel() {
return SUN_ARCH_DATA_MODEL;
}
/**
* 取得当前JRE的名称取自系统属性<code>java.runtime.name</code>)。
*
* <p>
* 例如Sun JDK 1.4.2 <code>"Java(TM) 2 Runtime Environment, Standard Edition"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.3
*/
public final String getName() {
return JAVA_RUNTIME_NAME;
}
/**
* 取得当前JRE的版本取自系统属性<code>java.runtime.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"1.4.2-b28"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.3
*/
public final String getVersion() {
return JAVA_RUNTIME_VERSION;
}
/**
* 取得当前JRE的安装目录取自系统属性<code>java.home</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"/opt/jdk1.4.2/jre"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getHomeDir() {
return JAVA_HOME;
}
/**
* 取得当前JRE的扩展目录列表取自系统属性<code>java.ext.dirs</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"/opt/jdk1.4.2/jre/lib/ext:..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.3
*/
public final String getExtDirs() {
return JAVA_EXT_DIRS;
}
/**
* 取得当前JRE的endorsed目录列表取自系统属性<code>java.endorsed.dirs</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"/opt/jdk1.4.2/jre/lib/endorsed:..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.4
*/
public final String getEndorsedDirs() {
return JAVA_ENDORSED_DIRS;
}
/**
* 取得当前JRE的系统classpath取自系统属性<code>java.class.path</code>)。
*
* <p>
* 例如:<code>"/home/admin/myclasses:/home/admin/..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getClassPath() {
return JAVA_CLASS_PATH;
}
/**
* 取得当前JRE的系统classpath取自系统属性<code>java.class.path</code>)。
*
* <p>
* 例如:<code>"/home/admin/myclasses:/home/admin/..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String[] getClassPathArray() {
return StrUtil.split(getClassPath(), SystemUtil.get("path.separator", false));
}
/**
* 取得当前JRE的class文件格式的版本取自系统属性<code>java.class.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"48.0"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getClassVersion() {
return JAVA_CLASS_VERSION;
}
/**
* 取得当前JRE的library搜索路径取自系统属性<code>java.library.path</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"/opt/jdk1.4.2/bin:..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getLibraryPath() {
return JAVA_LIBRARY_PATH;
}
/**
* 取得当前JRE的library搜索路径取自系统属性<code>java.library.path</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"/opt/jdk1.4.2/bin:..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*
*/
public final String[] getLibraryPathArray() {
return StrUtil.split(getLibraryPath(), SystemUtil.get("path.separator", false));
}
/**
* 取得当前JRE的URL协议packages列表取自系统属性<code>java.library.path</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"sun.net.www.protocol|..."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*
*/
public final String getProtocolPackages() {
return SystemUtil.get("java.protocol.handler.pkgs", true);
}
/**
* 将当前运行的JRE信息转换成字符串。
*
* @return JRE信息的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "Java Runtime Name: ", getName());
SystemUtil.append(builder, "Java Runtime Version: ", getVersion());
SystemUtil.append(builder, "Java Home Dir: ", getHomeDir());
SystemUtil.append(builder, "Java Extension Dirs: ", getExtDirs());
SystemUtil.append(builder, "Java Endorsed Dirs: ", getEndorsedDirs());
SystemUtil.append(builder, "Java Class Path: ", getClassPath());
SystemUtil.append(builder, "Java Class Version: ", getClassVersion());
SystemUtil.append(builder, "Java Library Path: ", getLibraryPath());
SystemUtil.append(builder, "Java Protocol Packages: ", getProtocolPackages());
return builder.toString();
}
}

View File

@@ -0,0 +1,74 @@
package cn.hutool.system;
import java.io.Serializable;
/**
* 代表Java Specification的信息。
*/
public class JavaSpecInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String JAVA_SPECIFICATION_NAME = SystemUtil.get("java.specification.name", false);
private final String JAVA_SPECIFICATION_VERSION = SystemUtil.get("java.specification.version", false);
private final String JAVA_SPECIFICATION_VENDOR = SystemUtil.get("java.specification.vendor", false);
/**
* 取得当前Java Spec.的名称(取自系统属性:<code>java.specification.name</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Java Platform API Specification"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getName() {
return JAVA_SPECIFICATION_NAME;
}
/**
* 取得当前Java Spec.的版本(取自系统属性:<code>java.specification.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"1.4"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.3
*/
public final String getVersion() {
return JAVA_SPECIFICATION_VERSION;
}
/**
* 取得当前Java Spec.的厂商(取自系统属性:<code>java.specification.vendor</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Sun Microsystems Inc."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getVendor() {
return JAVA_SPECIFICATION_VENDOR;
}
/**
* 将Java Specification的信息转换成字符串。
*
* @return JVM spec.的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "Java Spec. Name: ", getName());
SystemUtil.append(builder, "Java Spec. Version: ", getVersion());
SystemUtil.append(builder, "Java Spec. Vendor: ", getVendor());
return builder.toString();
}
}

View File

@@ -0,0 +1,89 @@
package cn.hutool.system;
import java.io.Serializable;
/**
* 代表Java Virtual Machine Implementation的信息。
*/
public class JvmInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String JAVA_VM_NAME = SystemUtil.get("java.vm.name", false);
private final String JAVA_VM_VERSION = SystemUtil.get("java.vm.version", false);
private final String JAVA_VM_VENDOR = SystemUtil.get("java.vm.vendor", false);
private final String JAVA_VM_INFO = SystemUtil.get("java.vm.info", false);
/**
* 取得当前JVM impl.的名称(取自系统属性:<code>java.vm.name</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Java HotSpot(TM) Client VM"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getName() {
return JAVA_VM_NAME;
}
/**
* 取得当前JVM impl.的版本(取自系统属性:<code>java.vm.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"1.4.2-b28"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getVersion() {
return JAVA_VM_VERSION;
}
/**
* 取得当前JVM impl.的厂商(取自系统属性:<code>java.vm.vendor</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Sun Microsystems Inc."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getVendor() {
return JAVA_VM_VENDOR;
}
/**
* 取得当前JVM impl.的信息(取自系统属性:<code>java.vm.info</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"mixed mode"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getInfo() {
return JAVA_VM_INFO;
}
/**
* 将Java Virutal Machine Implementation的信息转换成字符串。
*
* @return JVM impl.的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "JavaVM Name: ", getName());
SystemUtil.append(builder, "JavaVM Version: ", getVersion());
SystemUtil.append(builder, "JavaVM Vendor: ", getVendor());
SystemUtil.append(builder, "JavaVM Info: ", getInfo());
return builder.toString();
}
}

View File

@@ -0,0 +1,73 @@
package cn.hutool.system;
import java.io.Serializable;
/**
* 代表Java Virutal Machine Specification的信息。
*/
public class JvmSpecInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String JAVA_VM_SPECIFICATION_NAME = SystemUtil.get("java.vm.specification.name", false);
private final String JAVA_VM_SPECIFICATION_VERSION = SystemUtil.get("java.vm.specification.version", false);
private final String JAVA_VM_SPECIFICATION_VENDOR = SystemUtil.get("java.vm.specification.vendor", false);
/**
* 取得当前JVM spec.的名称(取自系统属性:<code>java.vm.specification.name</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Java Virtual Machine Specification"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getName() {
return JAVA_VM_SPECIFICATION_NAME;
}
/**
* 取得当前JVM spec.的版本(取自系统属性:<code>java.vm.specification.version</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"1.0"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getVersion() {
return JAVA_VM_SPECIFICATION_VERSION;
}
/**
* 取得当前JVM spec.的厂商(取自系统属性:<code>java.vm.specification.vendor</code>)。
*
* <p>
* 例如Sun JDK 1.4.2<code>"Sun Microsystems Inc."</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getVendor() {
return JAVA_VM_SPECIFICATION_VENDOR;
}
/**
* 将Java Virutal Machine Specification的信息转换成字符串。
*
* @return JVM spec.的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "JavaVM Spec. Name: ", getName());
SystemUtil.append(builder, "JavaVM Spec. Version: ", getVersion());
SystemUtil.append(builder, "JavaVM Spec. Vendor: ", getVendor());
return builder.toString();
}
}

View File

@@ -0,0 +1,441 @@
package cn.hutool.system;
import java.io.Serializable;
/**
* 代表当前OS的信息。
*/
public class OsInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String OS_VERSION = SystemUtil.get("os.version", false);
private final String OS_ARCH = SystemUtil.get("os.arch", false);
private final String OS_NAME = SystemUtil.get("os.name", false);
private final boolean IS_OS_AIX = getOSMatches("AIX");
private final boolean IS_OS_HP_UX = getOSMatches("HP-UX");
private final boolean IS_OS_IRIX = getOSMatches("Irix");
private final boolean IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX");
private final boolean IS_OS_MAC = getOSMatches("Mac");
private final boolean IS_OS_MAC_OSX = getOSMatches("Mac OS X");
private final boolean IS_OS_OS2 = getOSMatches("OS/2");
private final boolean IS_OS_SOLARIS = getOSMatches("Solaris");
private final boolean IS_OS_SUN_OS = getOSMatches("SunOS");
private final boolean IS_OS_WINDOWS = getOSMatches("Windows");
private final boolean IS_OS_WINDOWS_2000 = getOSMatches("Windows", "5.0");
private final boolean IS_OS_WINDOWS_95 = getOSMatches("Windows 9", "4.0");
private final boolean IS_OS_WINDOWS_98 = getOSMatches("Windows 9", "4.1");
private final boolean IS_OS_WINDOWS_ME = getOSMatches("Windows", "4.9");
private final boolean IS_OS_WINDOWS_NT = getOSMatches("Windows NT");
private final boolean IS_OS_WINDOWS_XP = getOSMatches("Windows", "5.1");
private final boolean IS_OS_WINDOWS_7 = getOSMatches("Windows", "6.1");
private final boolean IS_OS_WINDOWS_8 = getOSMatches("Windows", "6.2");
private final boolean IS_OS_WINDOWS_8_1 = getOSMatches("Windows", "6.3");
private final boolean IS_OS_WINDOWS_10 = getOSMatches("Windows", "10.0");
// 由于改变file.encoding属性并不会改变系统字符编码为了保持一致通过LocaleUtil取系统默认编码。
private final String FILE_SEPARATOR = SystemUtil.get("file.separator", false);
private final String LINE_SEPARATOR = SystemUtil.get("line.separator", false);
private final String PATH_SEPARATOR = SystemUtil.get("path.separator", false);
/**
* 取得当前OS的架构取自系统属性<code>os.arch</code>)。
*
* <p>
* 例如:<code>"x86"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getArch() {
return OS_ARCH;
}
/**
* 取得当前OS的名称取自系统属性<code>os.name</code>)。
*
* <p>
* 例如:<code>"Windows XP"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getName() {
return OS_NAME;
}
/**
* 取得当前OS的版本取自系统属性<code>os.version</code>)。
*
* <p>
* 例如:<code>"5.1"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getVersion() {
return OS_VERSION;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为AIX则返回<code>true</code>
*/
public final boolean isAix() {
return IS_OS_AIX;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为HP-UX则返回<code>true</code>
*/
public final boolean isHpUx() {
return IS_OS_HP_UX;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为IRIX则返回<code>true</code>
*/
public final boolean isIrix() {
return IS_OS_IRIX;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Linux则返回<code>true</code>
*/
public final boolean isLinux() {
return IS_OS_LINUX;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Mac则返回<code>true</code>
*/
public final boolean isMac() {
return IS_OS_MAC;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为MacOS X则返回<code>true</code>
*/
public final boolean isMacOsX() {
return IS_OS_MAC_OSX;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为OS2则返回<code>true</code>
*/
public final boolean isOs2() {
return IS_OS_OS2;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Solaris则返回<code>true</code>
*/
public final boolean isSolaris() {
return IS_OS_SOLARIS;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Sun OS则返回<code>true</code>
*/
public final boolean isSunOS() {
return IS_OS_SUN_OS;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows则返回<code>true</code>
*/
public final boolean isWindows() {
return IS_OS_WINDOWS;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 2000则返回<code>true</code>
*/
public final boolean isWindows2000() {
return IS_OS_WINDOWS_2000;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 95则返回<code>true</code>
*/
public final boolean isWindows95() {
return IS_OS_WINDOWS_95;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 98则返回<code>true</code>
*/
public final boolean isWindows98() {
return IS_OS_WINDOWS_98;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows ME则返回<code>true</code>
*/
public final boolean isWindowsME() {
return IS_OS_WINDOWS_ME;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows NT则返回<code>true</code>
*/
public final boolean isWindowsNT() {
return IS_OS_WINDOWS_NT;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows XP则返回<code>true</code>
*/
public final boolean isWindowsXP() {
return IS_OS_WINDOWS_XP;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 7则返回<code>true</code>
*/
public final boolean isWindows7() {
return IS_OS_WINDOWS_7;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 8则返回<code>true</code>
*/
public final boolean isWindoows8() {
return IS_OS_WINDOWS_8;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 8.1,则返回<code>true</code>
*/
public final boolean isWindows8_1() {
return IS_OS_WINDOWS_8_1;
}
/**
* 判断当前OS的类型。
*
* <p>
* 如果不能取得系统属性<code>os.name</code>因为Java安全限制则总是返回<code>false</code>
* </p>
*
* @return 如果当前OS类型为Windows 10则返回<code>true</code>
*/
public final boolean isWindows10() {
return IS_OS_WINDOWS_10;
}
/**
* 匹配OS名称。
*
* @param osNamePrefix OS名称前缀
*
* @return 如果匹配,则返回<code>true</code>
*/
private final boolean getOSMatches(String osNamePrefix) {
if (OS_NAME == null) {
return false;
}
return OS_NAME.startsWith(osNamePrefix);
}
/**
* 匹配OS名称。
*
* @param osNamePrefix OS名称前缀
* @param osVersionPrefix OS版本前缀
*
* @return 如果匹配,则返回<code>true</code>
*/
private final boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
if ((OS_NAME == null) || (OS_VERSION == null)) {
return false;
}
return OS_NAME.startsWith(osNamePrefix) && OS_VERSION.startsWith(osVersionPrefix);
}
/**
* 取得OS的文件路径的分隔符取自系统属性<code>file.separator</code>)。
*
* <p>
* 例如Unix为<code>"/"</code>Windows为<code>"\\"</code>。
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getFileSeparator() {
return FILE_SEPARATOR;
}
/**
* 取得OS的文本文件换行符取自系统属性<code>line.separator</code>)。
*
* <p>
* 例如Unix为<code>"\n"</code>Windows为<code>"\r\n"</code>。
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getLineSeparator() {
return LINE_SEPARATOR;
}
/**
* 取得OS的搜索路径分隔符取自系统属性<code>path.separator</code>)。
*
* <p>
* 例如Unix为<code>":"</code>Windows为<code>";"</code>。
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getPathSeparator() {
return PATH_SEPARATOR;
}
/**
* 将OS的信息转换成字符串。
*
* @return OS的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "OS Arch: ", getArch());
SystemUtil.append(builder, "OS Name: ", getName());
SystemUtil.append(builder, "OS Version: ", getVersion());
SystemUtil.append(builder, "File Separator: ", getFileSeparator());
SystemUtil.append(builder, "Line Separator: ", getLineSeparator());
SystemUtil.append(builder, "Path Separator: ", getPathSeparator());
return builder.toString();
}
}

View File

@@ -0,0 +1,68 @@
package cn.hutool.system;
import java.io.Serializable;
import cn.hutool.core.io.FileUtil;
/**
* 运行时信息,包括内存总大小、已用大小、可用大小等
* @author looly
*
*/
public class RuntimeInfo implements Serializable{
private static final long serialVersionUID = 1L;
private Runtime currentRuntime = Runtime.getRuntime();
/**
* 获得运行时对象
* @return {@link Runtime}
*/
public final Runtime getRuntime(){
return currentRuntime;
}
/**
* 获得JVM最大可用内存
* @return 最大可用内存
*/
public final long getMaxMemory(){
return currentRuntime.maxMemory();
}
/**
* 获得JVM已分配内存
* @return 已分配内存
*/
public final long getTotalMemory(){
return currentRuntime.totalMemory();
}
/**
* 获得JVM已分配内存中的剩余空间
* @return 已分配内存中的剩余空间
*/
public final long getFreeMemory(){
return currentRuntime.freeMemory();
}
/**
* 获得JVM最大可用内存
* @return 最大可用内存
*/
public final long getUsableMemory(){
return currentRuntime.maxMemory() - currentRuntime.totalMemory() + currentRuntime.freeMemory();
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "Max Memory: ", FileUtil.readableFileSize(getMaxMemory()));
SystemUtil.append(builder, "Total Memory: ", FileUtil.readableFileSize(getTotalMemory()));
SystemUtil.append(builder, "Free Memory: ", FileUtil.readableFileSize(getFreeMemory()));
SystemUtil.append(builder, "Usable Memory: ", FileUtil.readableFileSize(getUsableMemory()));
return builder.toString();
}
}

View File

@@ -0,0 +1,472 @@
package cn.hutool.system;
import java.io.PrintWriter;
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.CompilationMXBean;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryManagerMXBean;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.RuntimeMXBean;
import java.lang.management.ThreadMXBean;
import java.util.List;
import java.util.Properties;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Singleton;
import cn.hutool.core.util.StrUtil;
/**
* Java的System类封装工具类。<br>
* http://blog.csdn.net/zhongweijian/article/details/7619383
*
* @author Looly
*
*/
public class SystemUtil {
/***** Java运行时环境信息 *****/
// Java 运行时环境规范名称
public final static String SPECIFICATION_NAME = "java.specification.name";
// Java 运行时环境版本
public final static String VERSION = "java.version";
// Java 运行时环境规范版本
public final static String SPECIFICATION_VERSION = "java.specification.version";
// Java 运行时环境供应商
public final static String VENDOR = "java.vendor";
// Java 运行时环境规范供应商
public final static String SPECIFICATION_VENDOR = "java.specification.vendor";
// Java 供应商的 URL
public final static String VENDOR_URL = "java.vendor.url";
// Java 安装目录
public final static String HOME = "java.home";
// 加载库时搜索的路径列表
public final static String LIBRARY_PATH = "java.library.path";
// 默认的临时文件路径
public final static String TMPDIR = "java.io.tmpdir";
// 要使用的 JIT 编译器的名称
public final static String COMPILER = "java.compiler";
// 一个或多个扩展目录的路径
public final static String EXT_DIRS = "java.ext.dirs";
/***** Java虚拟机信息 *****/
// Java 虚拟机实现名称
public final static String VM_NAME = "java.vm.name";
// Java 虚拟机规范名称
public final static String VM_SPECIFICATION_NAME = "java.vm.specification.name";
// Java 虚拟机实现版本
public final static String VM_VERSION = "java.vm.version";
// Java 虚拟机规范版本
public final static String VM_SPECIFICATION_VERSION = "java.vm.specification.version";
// Java 虚拟机实现供应商
public final static String VM_VENDEOR = "java.vm.vendor";
// Java 虚拟机规范供应商
public final static String VM_SPECIFICATION_VENDOR = "java.vm.specification.vendor";
/***** Java类信息 *****/
// Java 类格式版本号
public final static String CLASS_VERSION = "java.class.version";
// Java 类路径
public final static String CLASS_PATH = "java.class.path";
/***** OS信息 *****/
// 操作系统的名称
public final static String OS_NAME = "os.name";
// 操作系统的架构
public final static String OS_ARCH = "os.arch";
// 操作系统的版本
public final static String OS_VERSION = "os.version";
// 文件分隔符(在 UNIX 系统中是“/”)
public final static String FILE_SEPRATOR = "file.separator";
// 路径分隔符(在 UNIX 系统中是“:”)
public final static String PATH_SEPRATOR = "path.separator";
// 行分隔符(在 UNIX 系统中是“\n”
public final static String LINE_SEPRATOR = "line.separator";
/***** 用户信息 *****/
// 用户的账户名称
public final static String USER_NAME = "user.name";
// 用户的主目录
public final static String USER_HOME = "user.home";
// 用户的当前工作目录
public final static String USER_DIR = "user.dir";
// ----------------------------------------------------------------------- Basic start
/**
* 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 <code>null</code>。
*
* @param name 属性名
* @param defaultValue 默认值
* @return 属性值或<code>null</code>
*/
public static String get(String name, String defaultValue) {
return StrUtil.nullToDefault(get(name, false), defaultValue);
}
/**
* 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 <code>null</code>。
*
* @param name 属性名
* @param quiet 安静模式,不将出错信息打在<code>System.err</code>中
*
* @return 属性值或<code>null</code>
*/
public static String get(String name, boolean quiet) {
try {
return System.getProperty(name);
} catch (SecurityException e) {
if (false == quiet) {
Console.error("Caught a SecurityException reading the system property '{}'; the SystemUtil property value will default to null.", name);
}
return null;
}
}
/**
* 获得System属性调用System.getProperty
*
* @param key 键
* @return 属性值
*/
public static String get(String key) {
return get(key, null);
}
/**
* 获得boolean类型值
*
* @param key 键
* @param defaultValue 默认值
* @return 值
*/
public static boolean getBoolean(String key, boolean defaultValue) {
String value = get(key);
if (value == null) {
return defaultValue;
}
value = value.trim().toLowerCase();
if (value.isEmpty()) {
return true;
}
if ("true".equals(value) || "yes".equals(value) || "1".equals(value)) {
return true;
}
if ("false".equals(value) || "no".equals(value) || "0".equals(value)) {
return false;
}
return defaultValue;
}
/**
* 获得int类型值
*
* @param key 键
* @param defaultValue 默认值
* @return 值
*/
public static long getInt(String key, int defaultValue) {
return Convert.toInt(get(key), defaultValue);
}
/**
* 获得long类型值
*
* @param key 键
* @param defaultValue 默认值
* @return 值
*/
public static long getLong(String key, long defaultValue) {
return Convert.toLong(get(key), defaultValue);
}
/**
* @return 属性列表
*/
public static Properties props() {
return System.getProperties();
}
/**
* 获取当前进程 PID
*
* @return 当前进程 ID
*/
public static long getCurrentPID() {
return Long.parseLong(getRuntimeMXBean().getName().split("@")[0]);
}
// ----------------------------------------------------------------------- Basic end
/**
* 返回Java虚拟机类加载系统相关属性
*
* @return {@link ClassLoadingMXBean}
* @since 4.1.4
*/
public static ClassLoadingMXBean getClassLoadingMXBean() {
return ManagementFactory.getClassLoadingMXBean();
}
/**
* 返回Java虚拟机内存系统相关属性
*
* @return {@link MemoryMXBean}
* @since 4.1.4
*/
public static MemoryMXBean getMemoryMXBean() {
return ManagementFactory.getMemoryMXBean();
}
/**
* 返回Java虚拟机线程系统相关属性
*
* @return {@link ThreadMXBean}
* @since 4.1.4
*/
public static ThreadMXBean getThreadMXBean() {
return ManagementFactory.getThreadMXBean();
}
/**
* 返回Java虚拟机运行时系统相关属性
*
* @return {@link RuntimeMXBean}
* @since 4.1.4
*/
public static RuntimeMXBean getRuntimeMXBean() {
return ManagementFactory.getRuntimeMXBean();
}
/**
* 返回Java虚拟机编译系统相关属性<br>
* 如果没有编译系统,则返回<code>null</code>
*
* @return a {@link CompilationMXBean} ,如果没有编译系统,则返回<code>null</code>
* @since 4.1.4
*/
public static CompilationMXBean getCompilationMXBean() {
return ManagementFactory.getCompilationMXBean();
}
/**
* 返回Java虚拟机运行下的操作系统相关信息属性
*
* @return {@link OperatingSystemMXBean}
* @since 4.1.4
*/
public static OperatingSystemMXBean getOperatingSystemMXBean() {
return ManagementFactory.getOperatingSystemMXBean();
}
/**
* Returns a list of {@link MemoryPoolMXBean} objects in the Java virtual machine. <br>
* The Java virtual machine can have one or more memory pools. It may add or remove memory pools during execution.
*
* @return a list of <tt>MemoryPoolMXBean</tt> objects.
*
*/
public static List<MemoryPoolMXBean> getMemoryPoolMXBeans() {
return ManagementFactory.getMemoryPoolMXBeans();
}
/**
* Returns a list of {@link MemoryManagerMXBean} objects in the Java virtual machine. <br>
* The Java virtual machine can have one or more memory managers. It may add or remove memory managers during execution.
*
* @return a list of <tt>MemoryManagerMXBean</tt> objects.
*
*/
public static List<MemoryManagerMXBean> getMemoryManagerMXBeans() {
return ManagementFactory.getMemoryManagerMXBeans();
}
/**
* Returns a list of {@link GarbageCollectorMXBean} objects in the Java virtual machine. <br>
* The Java virtual machine may have one or more <tt>GarbageCollectorMXBean</tt> objects. <br>
* It may add or remove <tt>GarbageCollectorMXBean</tt> during execution.
*
* @return a list of <tt>GarbageCollectorMXBean</tt> objects.
*
*/
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
return ManagementFactory.getGarbageCollectorMXBeans();
}
/**
* 取得Java Virtual Machine Specification的信息。
*
* @return <code>JvmSpecInfo</code>对象
*/
public static JvmSpecInfo getJvmSpecInfo() {
return Singleton.get(JvmSpecInfo.class);
}
/**
* 取得Java Virtual Machine Implementation的信息。
*
* @return <code>JvmInfo</code>对象
*/
public static JvmInfo getJvmInfo() {
return Singleton.get(JvmInfo.class);
}
/**
* 取得Java Specification的信息。
*
* @return <code>JavaSpecInfo</code>对象
*/
public static JavaSpecInfo getJavaSpecInfo() {
return Singleton.get(JavaSpecInfo.class);
}
/**
* 取得Java Implementation的信息。
*
* @return <code>JavaInfo</code>对象
*/
public static JavaInfo getJavaInfo() {
return Singleton.get(JavaInfo.class);
}
/**
* 取得当前运行的JRE的信息。
*
* @return <code>JreInfo</code>对象
*/
public static JavaRuntimeInfo getJavaRuntimeInfo() {
return Singleton.get(JavaRuntimeInfo.class);
}
/**
* 取得OS的信息。
*
* @return <code>OsInfo</code>对象
*/
public static OsInfo getOsInfo() {
return Singleton.get(OsInfo.class);
}
/**
* 取得User的信息。
*
* @return <code>UserInfo</code>对象
*/
public static UserInfo getUserInfo() {
return Singleton.get(UserInfo.class);
}
/**
* 取得Host的信息。
*
* @return <code>HostInfo</code>对象
*/
public static HostInfo getHostInfo() {
return Singleton.get(HostInfo.class);
}
/**
* 取得Runtime的信息。
*
* @return <code>RuntimeInfo</code>对象
*/
public static RuntimeInfo getRuntimeInfo() {
return Singleton.get(RuntimeInfo.class);
}
/**
* 获取JVM中内存总大小
*
* @return 内存总大小
* @since 4.5.4
*/
public static long getTotalMemory() {
return Runtime.getRuntime().totalMemory();
}
/**
* 获取JVM中内存剩余大小
*
* @return 内存剩余大小
* @since 4.5.4
*/
public static long getFreeMemory() {
return Runtime.getRuntime().freeMemory();
}
/**
* 获取JVM可用的内存总大小
*
* @return JVM可用的内存总大小
* @since 4.5.4
*/
public static long getMaxMemory() {
return Runtime.getRuntime().maxMemory();
}
/**
* 获取总线程数
*
* @return 总线程数
*/
public static int getTotalThreadCount() {
ThreadGroup parentThread = Thread.currentThread().getThreadGroup();
while(null != parentThread.getParent()) {
parentThread = parentThread.getParent();
}
return parentThread.activeCount();
}
// ------------------------------------------------------------------ Dump
/**
* 将系统信息输出到<code>System.out</code>中。
*/
public static void dumpSystemInfo() {
dumpSystemInfo(new PrintWriter(System.out));
}
/**
* 将系统信息输出到指定<code>PrintWriter</code>中。
*
* @param out <code>PrintWriter</code>输出流
*/
public static void dumpSystemInfo(PrintWriter out) {
out.println("--------------");
out.println(getJvmSpecInfo());
out.println("--------------");
out.println(getJvmInfo());
out.println("--------------");
out.println(getJavaSpecInfo());
out.println("--------------");
out.println(getJavaInfo());
out.println("--------------");
out.println(getJavaRuntimeInfo());
out.println("--------------");
out.println(getOsInfo());
out.println("--------------");
out.println(getUserInfo());
out.println("--------------");
out.println(getHostInfo());
out.println("--------------");
out.println(getRuntimeInfo());
out.println("--------------");
out.flush();
}
/**
* 输出到<code>StringBuilder</code>。
*
* @param builder <code>StringBuilder</code>对象
* @param caption 标题
* @param value 值
*/
protected static void append(StringBuilder builder, String caption, Object value) {
builder.append(caption).append(StrUtil.nullToDefault(Convert.toStr(value), "[n/a]")).append("\n");
}
}

View File

@@ -0,0 +1,125 @@
package cn.hutool.system;
import java.io.Serializable;
/**
* 代表当前用户的信息。
*/
public class UserInfo implements Serializable{
private static final long serialVersionUID = 1L;
private final String USER_NAME = SystemUtil.get("user.name", false);
private final String USER_HOME = SystemUtil.get("user.home", false);
private final String USER_DIR = SystemUtil.get("user.dir", false);
private final String USER_LANGUAGE = SystemUtil.get("user.language", false);
private final String USER_COUNTRY = ((SystemUtil.get("user.country", false) == null) ? SystemUtil.get("user.region", false) : SystemUtil.get("user.country", false));
private final String JAVA_IO_TMPDIR = SystemUtil.get("java.io.tmpdir", false);
/**
* 取得当前登录用户的名字(取自系统属性:<code>user.name</code>)。
*
* <p>
* 例如:<code>"admin"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getName() {
return USER_NAME;
}
/**
* 取得当前登录用户的home目录取自系统属性<code>user.home</code>)。
*
* <p>
* 例如:<code>"/home/admin"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getHomeDir() {
return USER_HOME;
}
/**
* 取得当前目录(取自系统属性:<code>user.dir</code>)。
*
* <p>
* 例如:<code>"/home/admin/working"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
* @since Java 1.1
*/
public final String getCurrentDir() {
return USER_DIR;
}
/**
* 取得临时目录(取自系统属性:<code>java.io.tmpdir</code>)。
*
* <p>
* 例如:<code>"/tmp"</code>
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*
*/
public final String getTempDir() {
return JAVA_IO_TMPDIR;
}
/**
* 取得当前登录用户的语言设置(取自系统属性:<code>user.language</code>)。
*
* <p>
* 例如:<code>"zh"</code>、<code>"en"</code>等
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getLanguage() {
return USER_LANGUAGE;
}
/**
* 取得当前登录用户的国家或区域设置取自系统属性JDK1.4 <code>user.country</code>或JDK1.2 <code>user.region</code>)。
*
* <p>
* 例如:<code>"CN"</code>、<code>"US"</code>等
* </p>
*
* @return 属性值如果不能取得因为Java安全限制或值不存在则返回<code>null</code>。
*
*/
public final String getCountry() {
return USER_COUNTRY;
}
/**
* 将当前用户的信息转换成字符串。
*
* @return 用户信息的字符串表示
*/
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
SystemUtil.append(builder, "User Name: ", getName());
SystemUtil.append(builder, "User Home Dir: ", getHomeDir());
SystemUtil.append(builder, "User Current Dir: ", getCurrentDir());
SystemUtil.append(builder, "User Temp Dir: ", getTempDir());
SystemUtil.append(builder, "User Language: ", getLanguage());
SystemUtil.append(builder, "User Country: ", getCountry());
return builder.toString();
}
}

View File

@@ -0,0 +1,7 @@
/**
* System模块主要获取系统、JVM、内存、CPU等信息以便动态监测系统状态
*
* @author looly
*
*/
package cn.hutool.system;

View File

@@ -0,0 +1,33 @@
package cn.hutool.system;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
public class SystemUtilTest {
@Test
@Ignore
public void dumpTest() {
SystemUtil.dumpSystemInfo();
}
@Test
public void getCurrentPidTest() {
long pid = SystemUtil.getCurrentPID();
Assert.assertTrue(pid > 0);
}
@Test
public void getJavaInfoTest() {
JavaInfo javaInfo = SystemUtil.getJavaInfo();
Assert.assertNotNull(javaInfo);
}
@Test
public void getOsInfoTest() {
OsInfo osInfo = SystemUtil.getOsInfo();
Assert.assertNotNull(osInfo);
}
}