Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

      • 简介
      • 随机数工具-RandomUtil
      • ByteUtil
      • CharsetUtil
      • EnumUtil
      • JdkUtil
      • JNDIUtil
      • ObjUtil
      • RuntimeUtil
      • SystemUtil
        • 功能介绍
        • 常量定义
        • 核心方法
          • 1. 系统属性获取
          • get(String, String)
          • get(String)
          • getQuietly(String)
          • 2. 类型转换获取
          • getBoolean(String, boolean)
          • getInt(String, int)
          • getLong(String, long)
          • 3. 系统属性操作
          • getProps()
          • set(String, String)
          • 4. 常用路径获取
          • getJavaClassPaths()
          • getUserHomePath()
          • getTmpDirPath()
          • getUserDirPath()
        • 应用场景
          • 1. 安全获取系统属性
          • 2. 环境变量获取
          • 3. 配置管理
          • 4. 路径管理
          • 5. 动态配置
        • 注意事项
        • 总结
    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 工具集合(util)
Hutool
2026-01-03
目录

SystemUtil

SystemUtil是Hutool中用于处理系统属性和环境变量的工具类,提供了安全、便捷的方式来获取和设置系统属性,封装了System.getProperty()和System.getenv()方法。

# 功能介绍

  • 系统属性获取:安全获取系统属性,避免权限问题导致的异常
  • 环境变量获取:支持获取环境变量
  • 类型转换:提供不同类型属性值的获取方法(字符串、布尔值、整数、长整数)
  • 常用路径获取:便捷获取用户目录、临时目录、工作目录等常用路径
  • 系统属性设置:支持设置和清除系统属性
  • ClassPath获取:获取Java ClassPath路径
  • 安全模式:提供安静模式,忽略无权限问题

# 常量定义

常量名 描述
HUTOOL_DATE_LENIENT Hutool自定义系统属性:是否解析日期字符串采用严格模式

# 核心方法

# 1. 系统属性获取

# get(String, String)

取得系统属性,如果因为Java安全的限制而失败,则返回默认值。

// 获取系统属性,失败返回默认值
String javaVersion = SystemUtil.get("java.version", "unknown");
Console.log("Java版本:" + javaVersion);

// 获取环境变量,失败返回默认值
String path = SystemUtil.get("PATH", "");
Console.log("PATH环境变量:" + path);

# get(String)

获得System属性,首先尝试获取系统属性,失败则尝试获取环境变量。

// 获取系统属性
String osName = SystemUtil.get("os.name");
Console.log("操作系统名称:" + osName);

// 获取环境变量
String javaHome = SystemUtil.get("JAVA_HOME");
Console.log("JAVA_HOME:" + javaHome);

# getQuietly(String)

获得System属性,忽略无权限问题,安静模式不打印错误信息。

// 安静模式获取系统属性,避免权限问题导致的异常
String userName = SystemUtil.getQuietly("user.name");
Console.log("用户名:" + userName);

# 2. 类型转换获取

# getBoolean(String, boolean)

获得boolean类型值。

// 获取Hutool日期解析严格模式设置,默认值为true
boolean dateLenient = SystemUtil.getBoolean(SystemUtil.HUTOOL_DATE_LENIENT, true);
Console.log("Hutool日期解析严格模式:" + dateLenient);

# getInt(String, int)

获得int类型值。

// 获取Java虚拟机最大内存(MB),默认值为256MB
int maxMemory = SystemUtil.getInt("sun.arch.data.model", 256);
Console.log("Java虚拟机数据模型:" + maxMemory + "位");

# getLong(String, long)

获得long类型值。

// 获取系统时间戳(毫秒),默认值为当前时间
long currentTime = SystemUtil.getLong("current.time", System.currentTimeMillis());
Console.log("当前时间:" + currentTime);

# 3. 系统属性操作

# getProps()

获取所有系统属性。

// 获取所有系统属性
Properties props = SystemUtil.getProps();
// 遍历并打印系统属性
props.forEach((key, value) -> {
    Console.log(key + ": " + value);
});

# set(String, String)

设置系统属性,value为null表示移除此属性。

// 设置Hutool日期解析严格模式
SystemUtil.set(SystemUtil.HUTOOL_DATE_LENIENT, "false");

// 移除系统属性
SystemUtil.set("custom.property", null);

# 4. 常用路径获取

# getJavaClassPaths()

获得Java ClassPath路径,不包括jre。

// 获取Java ClassPath路径
String[] classPaths = SystemUtil.getJavaClassPaths();
Console.log("Java ClassPath路径:");
for (String path : classPaths) {
    Console.log("  " + path);
}

# getUserHomePath()

获取用户路径(绝对路径)。

// 获取用户路径
String userHome = SystemUtil.getUserHomePath();
Console.log("用户路径:" + userHome);

# getTmpDirPath()

获取临时文件路径(绝对路径)。

// 获取临时文件路径
String tmpDir = SystemUtil.getTmpDirPath();
Console.log("临时文件路径:" + tmpDir);

# getUserDirPath()

获取工作目录路径(绝对路径)。

// 获取工作目录路径
String userDir = SystemUtil.getUserDirPath();
Console.log("工作目录路径:" + userDir);

# 应用场景

# 1. 安全获取系统属性

在Java安全沙箱环境中,获取某些系统属性可能会抛出SecurityException。使用SystemUtil可以安全地获取系统属性:

// 传统方式可能抛出SecurityException
String osName;
try {
    osName = System.getProperty("os.name");
} catch (SecurityException e) {
    osName = "unknown";
}

// 使用SystemUtil,安全获取
String osName = SystemUtil.get("os.name", "unknown");

# 2. 环境变量获取

在需要获取环境变量时,可以使用SystemUtil:

// 获取数据库连接信息
String dbHost = SystemUtil.get("DB_HOST", "localhost");
String dbPort = SystemUtil.get("DB_PORT", "3306");
String dbUser = SystemUtil.get("DB_USER", "root");
String dbPass = SystemUtil.get("DB_PASS", "");

// 构建数据库连接URL
String url = String.format("jdbc:mysql://%s:%s/mydb", dbHost, dbPort);

# 3. 配置管理

在应用程序中,可以使用系统属性来管理配置:

// 获取应用程序配置
String appName = SystemUtil.get("app.name", "MyApp");
String appVersion = SystemUtil.get("app.version", "1.0.0");
boolean debugMode = SystemUtil.getBoolean("app.debug", false);
int maxThreads = SystemUtil.getInt("app.max.threads", RuntimeUtil.getProcessorCount());

// 初始化应用程序
AppConfig config = new AppConfig();
config.setName(appName);
config.setVersion(appVersion);
config.setDebugMode(debugMode);
config.setMaxThreads(maxThreads);

# 4. 路径管理

在需要使用系统路径时,可以使用SystemUtil提供的便捷方法:

// 获取临时文件路径,用于存储临时数据
String tmpPath = SystemUtil.getTmpDirPath();
File tmpFile = new File(tmpPath, "temp_data.txt");

// 获取用户目录,用于存储用户配置
String userHome = SystemUtil.getUserHomePath();
File configFile = new File(userHome, ".myapp/config.properties");

// 获取工作目录,用于处理相对路径
String userDir = SystemUtil.getUserDirPath();
File dataFile = new File(userDir, "data/file.txt");

# 5. 动态配置

在应用程序运行时,可以动态设置系统属性:

// 动态设置日志级别
SystemUtil.set("logging.level.root", "DEBUG");

// 动态设置Hutool日期解析严格模式
SystemUtil.set(SystemUtil.HUTOOL_DATE_LENIENT, "true");

// 移除不需要的系统属性
SystemUtil.set("temp.property", null);

# 注意事项

  1. 属性优先级:SystemUtil.get()方法首先尝试获取系统属性,失败则尝试获取环境变量。
  2. 权限问题:在某些安全环境中,获取系统属性或环境变量可能会抛出SecurityException。使用getQuietly()方法可以忽略这些异常。
  3. 类型转换:使用getBoolean()、getInt()和getLong()方法时,会尝试将字符串值转换为对应的类型,如果转换失败则返回默认值。
  4. 系统属性修改:使用set()方法修改系统属性时,修改的作用域仅限于当前JVM实例。
  5. 环境变量只读:SystemUtil不提供修改环境变量的方法,因为环境变量是由操作系统管理的,JVM只能读取,不能修改。
  6. 性能考虑:频繁获取系统属性可能会影响性能,建议将经常使用的系统属性缓存起来。

# 总结

SystemUtil是一个功能强大的系统属性工具类,提供了安全、便捷的方式来获取和设置系统属性。无论是获取系统信息、管理应用配置还是处理系统路径,SystemUtil都能提供简洁高效的解决方案。在Java开发中,合理使用SystemUtil可以简化代码,提高应用程序的安全性和可维护性。

RuntimeUtil
简介

← RuntimeUtil 简介→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式