Properties类是Java中专为配置设计的线程安全工具,基于Hashtable,支持ISO-8859-1编码(中文需转义或手动指定UTF-8),用于加载/解析.properties文件,不适用于复杂结构或变量引用。

Properties 类是 Java 中用于读写键值对配置信息的标准工具类,主要用于加载和操作 .properties 格式的文本配置文件。它底层基于 Hashtable,线程安全,天然支持 ISO-8859-1 编码(中文需转义),是 Java 应用中最轻量、最常用的外部化配置方案之一。
Properties 的核心用途
它不是通用 Map 容器,而是专为配置场景设计: • 从 classpath 或文件系统加载 .properties 文件(如 database.properties、app.conf) • 以 key=value 形式解析纯文本,自动忽略空行和 # 开头的注释行 • 支持通过 System.setProperty() 注入 JVM 级参数,并用 Properties 统一管理 • 可导出为带时间戳的注释格式(store() 方法),便于人工查看或审计
常用读取方式(带编码处理)
直接使用 InputStream 加载时,默认按 ISO-8859-1 解析,中文会乱码。正确做法是: • 用 InputStreamReader 指定 UTF-8 编码,再传给 Properties.load() • 或改用新版 Files.readString() + loadFromString()(Java 11+) • Spring 等框架内部已封装该逻辑,但原生开发必须手动处理编码
典型使用示例(含异常与路径处理)
推荐从 classpath 加载(更可靠):
// 示例:读取 src/main/resources/config.properties
Properties props = new Properties();
try (InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties")) {
if (is == null) throw new IllegalArgumentException("配置文件未找到");
props.load(is); // 此处不处理中文,需用 InputStreamReader 包装
} catch (IOException e) {
throw new RuntimeException("加载配置失败", e);
}
String url = props.getProperty("db.url"); // 获取值,支持默认值 props.getProperty("key", "default")
注意事项与替代建议
• 不适合复杂结构(如嵌套、数组),此时应选 YAML/JSON + Jackson/Gson • 不支持变量引用(如 ${host}:${port}),需自行实现替换逻辑 • 多环境配置建议配合 Maven profile 或 Spring Profiles 管理 • Java 9+ 可考虑 ResourceBundle,更适合国际化资源,但灵活性不如 Properties










