mirror of
https://gitee.com/dromara/hutool.git
synced 2025-09-18 17:48:17 +08:00
clean history
This commit is contained in:
24
hutool-system/pom.xml
Normal file
24
hutool-system/pom.xml
Normal 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>
|
75
hutool-system/src/main/java/cn/hutool/system/HostInfo.java
Normal file
75
hutool-system/src/main/java/cn/hutool/system/HostInfo.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
393
hutool-system/src/main/java/cn/hutool/system/JavaInfo.java
Normal file
393
hutool-system/src/main/java/cn/hutool/system/JavaInfo.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@@ -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();
|
||||
}
|
||||
|
||||
}
|
@@ -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();
|
||||
}
|
||||
|
||||
}
|
89
hutool-system/src/main/java/cn/hutool/system/JvmInfo.java
Normal file
89
hutool-system/src/main/java/cn/hutool/system/JvmInfo.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@@ -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();
|
||||
}
|
||||
|
||||
}
|
441
hutool-system/src/main/java/cn/hutool/system/OsInfo.java
Normal file
441
hutool-system/src/main/java/cn/hutool/system/OsInfo.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@@ -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();
|
||||
}
|
||||
}
|
472
hutool-system/src/main/java/cn/hutool/system/SystemUtil.java
Normal file
472
hutool-system/src/main/java/cn/hutool/system/SystemUtil.java
Normal 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");
|
||||
}
|
||||
}
|
125
hutool-system/src/main/java/cn/hutool/system/UserInfo.java
Normal file
125
hutool-system/src/main/java/cn/hutool/system/UserInfo.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* System模块主要获取系统、JVM、内存、CPU等信息,以便动态监测系统状态
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
package cn.hutool.system;
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user