com.base4j.util.system.OsInfo Maven / Gradle / Ivy
package com.base4j.util.system;
/**
* 代表当前OS的信息。
*/
public class OsInfo {
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");
// 由于改变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的架构(取自系统属性:os.arch
)。
*
*
* 例如:"x86"
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @since Java 1.1
*/
public final String getArch() {
return OS_ARCH;
}
/**
* 取得当前OS的名称(取自系统属性:os.name
)。
*
*
* 例如:"Windows XP"
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @since Java 1.1
*/
public final String getName() {
return OS_NAME;
}
/**
* 取得当前OS的版本(取自系统属性:os.version
)。
*
*
* 例如:"5.1"
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @since Java 1.1
*/
public final String getVersion() {
return OS_VERSION;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为AIX,则返回true
*/
public final boolean isAix() {
return IS_OS_AIX;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为HP-UX,则返回true
*/
public final boolean isHpUx() {
return IS_OS_HP_UX;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为IRIX,则返回true
*/
public final boolean isIrix() {
return IS_OS_IRIX;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Linux,则返回true
*/
public final boolean isLinux() {
return IS_OS_LINUX;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Mac,则返回true
*/
public final boolean isMac() {
return IS_OS_MAC;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为MacOS X,则返回true
*/
public final boolean isMacOsX() {
return IS_OS_MAC_OSX;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为OS2,则返回true
*/
public final boolean isOs2() {
return IS_OS_OS2;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Solaris,则返回true
*/
public final boolean isSolaris() {
return IS_OS_SOLARIS;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Sun OS,则返回true
*/
public final boolean isSunOS() {
return IS_OS_SUN_OS;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows,则返回true
*/
public final boolean isWindows() {
return IS_OS_WINDOWS;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows 2000,则返回true
*/
public final boolean isWindows2000() {
return IS_OS_WINDOWS_2000;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows 95,则返回true
*/
public final boolean isWindows95() {
return IS_OS_WINDOWS_95;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows 98,则返回true
*/
public final boolean isWindows98() {
return IS_OS_WINDOWS_98;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows ME,则返回true
*/
public final boolean isWindowsME() {
return IS_OS_WINDOWS_ME;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows NT,则返回true
*/
public final boolean isWindowsNT() {
return IS_OS_WINDOWS_NT;
}
/**
* 判断当前OS的类型。
*
*
* 如果不能取得系统属性os.name
(因为Java安全限制),则总是返回false
*
*
* @return 如果当前OS类型为Windows XP,则返回true
*/
public final boolean isWindowsXP() {
return IS_OS_WINDOWS_XP;
}
/**
* 匹配OS名称。
*
* @param osNamePrefix OS名称前缀
* @return 如果匹配,则返回true
*/
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 如果匹配,则返回true
*/
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的文件路径的分隔符(取自系统属性:file.separator
)。
*
*
* 例如:Unix为"/"
,Windows为"\\"
。
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @since Java 1.1
*/
public final String getFileSeparator() {
return FILE_SEPARATOR;
}
/**
* 取得OS的文本文件换行符(取自系统属性:line.separator
)。
*
*
* 例如:Unix为"\n"
,Windows为"\r\n"
。
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @since Java 1.1
*/
public final String getLineSeparator() {
return LINE_SEPARATOR;
}
/**
* 取得OS的搜索路径分隔符(取自系统属性:path.separator
)。
*
*
* 例如:Unix为":"
,Windows为";"
。
*
*
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回null
。
* @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();
}
}