diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java index 24ef9549c..b341f41cb 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java @@ -18,6 +18,7 @@ package cn.hutool.v7.extra.management; import cn.hutool.v7.core.net.NetUtil; +import java.io.Serial; import java.io.Serializable; import java.net.InetAddress; @@ -25,19 +26,23 @@ import java.net.InetAddress; * 代表当前主机的信息。 */ public class HostInfo implements Serializable { + @Serial private static final long serialVersionUID = 1L; - private final String HOST_NAME; - private final String HOST_ADDRESS; + private final String name; + private final String address; + /** + * 构造当前主机信息。 + */ public HostInfo() { final InetAddress localhost = NetUtil.getLocalhostV4(); if(null != localhost){ - HOST_NAME = localhost.getHostName(); - HOST_ADDRESS = localhost.getHostAddress(); + name = localhost.getHostName(); + address = localhost.getHostAddress(); } else{ - HOST_NAME = null; - HOST_ADDRESS = null; + name = null; + address = null; } } @@ -51,7 +56,7 @@ public class HostInfo implements Serializable { * @return 主机名 */ public final String getName() { - return HOST_NAME; + return name; } /** @@ -64,7 +69,7 @@ public class HostInfo implements Serializable { * @return 主机地址 */ public final String getAddress() { - return HOST_ADDRESS; + return address; } /** diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java index 3b9404250..84a57cab9 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java @@ -20,6 +20,7 @@ import cn.hutool.v7.core.regex.ReUtil; import cn.hutool.v7.core.array.ArrayUtil; import cn.hutool.v7.core.util.SystemUtil; +import java.io.Serial; import java.io.Serializable; /** @@ -28,13 +29,14 @@ import java.io.Serializable; * @see ManagementUtil#getJavaInfo() 使用方式 */ public class JavaInfo implements Serializable { + @Serial private static final long serialVersionUID = 1L; - private static 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); + private static final String version = SystemUtil.get("java.version", false); + private final float versionFloat = getJavaVersionAsFloat(); + private final int versionInt = getJavaVersionAsInt(); + private final String vendor = SystemUtil.get("java.vendor", false); + private final String vendorUrl = SystemUtil.get("java.vendor.url", false); private final boolean IS_JAVA_1_8 = getJavaVersionMatches("1.8"); private final boolean IS_JAVA_9 = getJavaVersionMatches("9"); @@ -58,7 +60,7 @@ public class JavaInfo implements Serializable { * @since Java 1.1 */ public final String getVersion() { - return JAVA_VERSION; + return version; } /** @@ -75,7 +77,7 @@ public class JavaInfo implements Serializable { * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code 0}。 */ public final float getVersionFloat() { - return JAVA_VERSION_FLOAT; + return versionFloat; } /** @@ -94,7 +96,7 @@ public class JavaInfo implements Serializable { * @since Java 1.1 */ public final int getVersionInt() { - return JAVA_VERSION_INT; + return versionInt; } /** @@ -113,13 +115,13 @@ public class JavaInfo implements Serializable { * @since 6.0.1 */ public final int getVersionIntSimple() { - if (JAVA_VERSION == null) { + if (version == null) { return 0; } - if (JAVA_VERSION.startsWith("1.")) { - return Integer.parseInt(JAVA_VERSION.split("\\.")[1]); + if (version.startsWith("1.")) { + return Integer.parseInt(version.split("\\.")[1]); } - return Integer.parseInt(JAVA_VERSION.split("\\.")[0]); + return Integer.parseInt(version.split("\\.")[0]); } /** @@ -128,11 +130,11 @@ public class JavaInfo implements Serializable { * @return Java版本的float值或{@code 0} */ private float getJavaVersionAsFloat() { - if (JAVA_VERSION == null) { + if (version == null) { return 0f; } - String str = JAVA_VERSION; + String str = version; str = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2})?", str, 0); @@ -145,11 +147,11 @@ public class JavaInfo implements Serializable { * @return Java版本的int值或{@code 0} */ private int getJavaVersionAsInt() { - if (JAVA_VERSION == null) { + if (version == null) { return 0; } - final String javaVersion = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2}){0,2}", JAVA_VERSION, 0); + final String javaVersion = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2}){0,2}", version, 0); final String[] split = javaVersion.split("\\."); String result = ArrayUtil.join(split, ""); @@ -172,7 +174,7 @@ public class JavaInfo implements Serializable { * @since Java 1.1 */ public final String getVendor() { - return JAVA_VENDOR; + return vendor; } /** @@ -185,7 +187,7 @@ public class JavaInfo implements Serializable { * @since Java 1.1 */ public final String getVendorURL() { - return JAVA_VENDOR_URL; + return vendorUrl; } /** @@ -309,11 +311,11 @@ public class JavaInfo implements Serializable { * @return 如果版本匹配,则返回{@code true} */ private boolean getJavaVersionMatches(final String versionPrefix) { - if (JAVA_VERSION == null) { + if (version == null) { return false; } - return JAVA_VERSION.startsWith(versionPrefix); + return version.startsWith(versionPrefix); } /** diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java index f3648a134..65056dff2 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java @@ -19,12 +19,14 @@ package cn.hutool.v7.extra.management; import cn.hutool.v7.core.text.split.SplitUtil; import cn.hutool.v7.core.util.SystemUtil; +import java.io.Serial; import java.io.Serializable; /** * 代表当前运行的JRE的信息。 */ public class JavaRuntimeInfo implements Serializable { + @Serial private static final long serialVersionUID = 1L; private final String JAVA_RUNTIME_NAME = SystemUtil.get("java.runtime.name", false); diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java index 788271e50..e0426fcb2 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java @@ -18,43 +18,82 @@ package cn.hutool.v7.extra.management; import cn.hutool.v7.core.util.SystemUtil; +import java.io.Serial; import java.io.Serializable; /** * 代表当前OS的信息。 */ -public class OsInfo implements Serializable{ +public class OsInfo implements Serializable { + @Serial 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"); + private final String name; + private final String version; + private final String arch; // 由于改变file.encoding属性并不会改变系统字符编码,为了保持一致,通过LocaleUtil取系统默认编码。 - private final String FILE_SEPARATOR = SystemUtil.get(SystemPropsKeys.FILE_SEPARATOR, false); - private final String LINE_SEPARATOR = SystemUtil.get(SystemPropsKeys.LINE_SEPARATOR, false); - private final String PATH_SEPARATOR = SystemUtil.get(SystemPropsKeys.PATH_SEPARATOR, false); + private final String fileSeparator; + private final String lineSeparator; + private final String pathSeparator; + + private final boolean IS_OS_AIX; + private final boolean IS_OS_HP_UX; + private final boolean IS_OS_IRIX; + private final boolean IS_OS_LINUX; + private final boolean IS_OS_MAC; + private final boolean IS_OS_MAC_OSX; + private final boolean IS_OS_OS2; + private final boolean IS_OS_SOLARIS; + private final boolean IS_OS_SUN_OS; + private final boolean IS_OS_WINDOWS; + private final boolean IS_OS_WINDOWS_2000; + private final boolean IS_OS_WINDOWS_95; + private final boolean IS_OS_WINDOWS_98; + private final boolean IS_OS_WINDOWS_ME; + private final boolean IS_OS_WINDOWS_NT; + private final boolean IS_OS_WINDOWS_XP; + + private final boolean IS_OS_WINDOWS_7; + private final boolean IS_OS_WINDOWS_8; + private final boolean IS_OS_WINDOWS_8_1; + private final boolean IS_OS_WINDOWS_10; + private final boolean IS_OS_WINDOWS_11; + + /** + * 构造一个{@code OsInfo}对象,用于取得当前OS的信息。 + */ + public OsInfo() { + this.name = SystemUtil.get("os.name", false); + this.version = SystemUtil.get("os.version", false); + this.arch = SystemUtil.get("os.arch", false); + + this.fileSeparator = SystemUtil.get(SystemPropsKeys.FILE_SEPARATOR, false); + this.lineSeparator = SystemUtil.get(SystemPropsKeys.LINE_SEPARATOR, false); + this.pathSeparator = SystemUtil.get(SystemPropsKeys.PATH_SEPARATOR, false); + + this.IS_OS_AIX = getOSMatches("AIX"); + this.IS_OS_HP_UX = getOSMatches("HP-UX"); + this.IS_OS_IRIX = getOSMatches("Irix"); + this.IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX"); + this.IS_OS_MAC = getOSMatches("Mac"); + this.IS_OS_MAC_OSX = getOSMatches("Mac OS X"); + this.IS_OS_OS2 = getOSMatches("OS/2"); + this.IS_OS_SOLARIS = getOSMatches("Solaris"); + this.IS_OS_SUN_OS = getOSMatches("SunOS"); + this.IS_OS_WINDOWS = getOSMatches("Windows"); + this.IS_OS_WINDOWS_2000 = getOSMatches("Windows", "5.0"); + this.IS_OS_WINDOWS_95 = getOSMatches("Windows 9", "4.0"); + this.IS_OS_WINDOWS_98 = getOSMatches("Windows 9", "4.1"); + this.IS_OS_WINDOWS_ME = getOSMatches("Windows", "4.9"); + this.IS_OS_WINDOWS_NT = getOSMatches("Windows NT"); + this.IS_OS_WINDOWS_XP = getOSMatches("Windows", "5.1"); + this.IS_OS_WINDOWS_7 = getOSMatches("Windows", "6.1"); + this.IS_OS_WINDOWS_8 = getOSMatches("Windows", "6.2"); + this.IS_OS_WINDOWS_8_1 = getOSMatches("Windows", "6.3"); + this.IS_OS_WINDOWS_10 = getOSMatches("Windows", "10.0"); + this.IS_OS_WINDOWS_11 = getOSMatches("Windows 11"); + } /** * 取得当前OS的架构(取自系统属性:{@code os.arch})。 @@ -64,11 +103,10 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getArch() { - return OS_ARCH; + return arch; } /** @@ -79,11 +117,10 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getName() { - return OS_NAME; + return name; } /** @@ -94,11 +131,10 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getVersion() { - return OS_VERSION; + return version; } /** @@ -358,38 +394,20 @@ public class OsInfo implements Serializable{ * @return 如果当前OS类型为Windows 10,则返回{@code true} */ public final boolean isWindows10() { - return IS_OS_WINDOWS_10; + return IS_OS_WINDOWS_10 && !IS_OS_WINDOWS_11; } /** - * 匹配OS名称。 + * 判断当前OS的类型。 * - * @param osNamePrefix OS名称前缀 + *

+ * 如果不能取得系统属性{@code os.name}(因为Java安全限制),则总是返回{@code false} + *

* - * @return 如果匹配,则返回{@code true} + * @return 如果当前OS类型为Windows 11,则返回{@code true} */ - private boolean getOSMatches(final String osNamePrefix) { - if (OS_NAME == null) { - return false; - } - - return OS_NAME.startsWith(osNamePrefix); - } - - /** - * 匹配OS名称。 - * - * @param osNamePrefix OS名称前缀 - * @param osVersionPrefix OS版本前缀 - * - * @return 如果匹配,则返回{@code true} - */ - private boolean getOSMatches(final String osNamePrefix, final String osVersionPrefix) { - if ((OS_NAME == null) || (OS_VERSION == null)) { - return false; - } - - return OS_NAME.startsWith(osNamePrefix) && OS_VERSION.startsWith(osVersionPrefix); + public final boolean isWindows11() { + return IS_OS_WINDOWS_11; } /** @@ -400,11 +418,10 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getFileSeparator() { - return FILE_SEPARATOR; + return fileSeparator; } /** @@ -415,11 +432,10 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getLineSeparator() { - return LINE_SEPARATOR; + return lineSeparator; } /** @@ -430,11 +446,39 @@ public class OsInfo implements Serializable{ *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getPathSeparator() { - return PATH_SEPARATOR; + return pathSeparator; + } + + /** + * 匹配OS名称。 + * + * @param osNamePrefix OS名称前缀 + * @return 如果匹配,则返回{@code true} + */ + private boolean getOSMatches(final String osNamePrefix) { + if (name == null) { + return false; + } + + return name.startsWith(osNamePrefix); + } + + /** + * 匹配OS名称。 + * + * @param osNamePrefix OS名称前缀 + * @param osVersionPrefix OS版本前缀 + * @return 如果匹配,则返回{@code true} + */ + private boolean getOSMatches(final String osNamePrefix, final String osVersionPrefix) { + if ((name == null) || (version == null)) { + return false; + } + + return name.startsWith(osNamePrefix) && version.startsWith(osVersionPrefix); } /** diff --git a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java index 635313953..963c703c3 100644 --- a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java @@ -16,6 +16,7 @@ package cn.hutool.v7.extra.management; +import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.util.SystemUtil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled;