All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dromara.hutool.extra.management.OsInfo Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2023 looly([email protected])
 * Hutool is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

package org.dromara.hutool.extra.management;

import org.dromara.hutool.core.util.SystemUtil;

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(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);

	/**
	 * 取得当前OS的架构(取自系统属性:{@code os.arch})。
	 *
	 * 

* 例如:{@code "x86"} *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getArch() { return OS_ARCH; } /** * 取得当前OS的名称(取自系统属性:{@code os.name})。 * *

* 例如:{@code "Windows XP"} *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getName() { return OS_NAME; } /** * 取得当前OS的版本(取自系统属性:{@code os.version})。 * *

* 例如:{@code "5.1"} *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getVersion() { return OS_VERSION; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为AIX,则返回{@code true} */ public final boolean isAix() { return IS_OS_AIX; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为HP-UX,则返回{@code true} */ public final boolean isHpUx() { return IS_OS_HP_UX; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为IRIX,则返回{@code true} */ public final boolean isIrix() { return IS_OS_IRIX; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Linux,则返回{@code true} */ public final boolean isLinux() { return IS_OS_LINUX; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Mac,则返回{@code true} */ public final boolean isMac() { return IS_OS_MAC; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为MacOS X,则返回{@code true} */ public final boolean isMacOsX() { return IS_OS_MAC_OSX; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为OS2,则返回{@code true} */ public final boolean isOs2() { return IS_OS_OS2; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Solaris,则返回{@code true} */ public final boolean isSolaris() { return IS_OS_SOLARIS; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Sun OS,则返回{@code true} */ public final boolean isSunOS() { return IS_OS_SUN_OS; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows,则返回{@code true} */ public final boolean isWindows() { return IS_OS_WINDOWS; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 2000,则返回{@code true} */ public final boolean isWindows2000() { return IS_OS_WINDOWS_2000; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 95,则返回{@code true} */ public final boolean isWindows95() { return IS_OS_WINDOWS_95; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 98,则返回{@code true} */ public final boolean isWindows98() { return IS_OS_WINDOWS_98; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows ME,则返回{@code true} */ public final boolean isWindowsME() { return IS_OS_WINDOWS_ME; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows NT,则返回{@code true} */ public final boolean isWindowsNT() { return IS_OS_WINDOWS_NT; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows XP,则返回{@code true} */ public final boolean isWindowsXP() { return IS_OS_WINDOWS_XP; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 7,则返回{@code true} */ public final boolean isWindows7() { return IS_OS_WINDOWS_7; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 8,则返回{@code true} */ public final boolean isWindows8() { return IS_OS_WINDOWS_8; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 8.1,则返回{@code true} */ public final boolean isWindows8_1() { return IS_OS_WINDOWS_8_1; } /** * 判断当前OS的类型。 * *

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

* * @return 如果当前OS类型为Windows 10,则返回{@code true} */ public final boolean isWindows10() { return IS_OS_WINDOWS_10; } /** * 匹配OS名称。 * * @param osNamePrefix OS名称前缀 * * @return 如果匹配,则返回{@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); } /** * 取得OS的文件路径的分隔符(取自系统属性:{@code file.separator})。 * *

* 例如:Unix为{@code "/"},Windows为{@code "\\"}。 *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getFileSeparator() { return FILE_SEPARATOR; } /** * 取得OS的文本文件换行符(取自系统属性:{@code line.separator})。 * *

* 例如:Unix为{@code "\n"},Windows为{@code "\r\n"}。 *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getLineSeparator() { return LINE_SEPARATOR; } /** * 取得OS的搜索路径分隔符(取自系统属性:{@code path.separator})。 * *

* 例如:Unix为{@code ":"},Windows为{@code ";"}。 *

* * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 * * @since Java 1.1 */ public final String getPathSeparator() { return PATH_SEPARATOR; } /** * 将OS的信息转换成字符串。 * * @return OS的字符串表示 */ @Override public final String toString() { final StringBuilder builder = new StringBuilder(); ManagementUtil.append(builder, "OS Arch: ", getArch()); ManagementUtil.append(builder, "OS Name: ", getName()); ManagementUtil.append(builder, "OS Version: ", getVersion()); ManagementUtil.append(builder, "File Separator: ", getFileSeparator()); ManagementUtil.append(builder, "Line Separator: ", getLineSeparator()); ManagementUtil.append(builder, "Path Separator: ", getPathSeparator()); return builder.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy