java中properties类用于处理.properties配置文件,支持iso-8859-1编码,默认需用inputstreamreader指定utf-8避免中文乱码;推荐从classpath加载、使用getproperty安全取值、store配合outputstreamwriter保存utf-8格式;注意键名大小写敏感、不保留原注释空行,复杂场景可选apache commons configuration。

Java 中的 Properties 类是处理键值对配置文件(如 .properties 文件)最常用的方式,它天然支持 ISO-8859-1 编码,也兼容 UTF-8(需额外处理)。使用它加载和保存配置简单直接,但编码、路径、空值等细节容易出错。
加载 properties 文件(从 classpath 或文件系统)
推荐优先从 classpath 加载(如放在 src/main/resources 下),便于打包后访问:
- 用
Class.getResourceAsStream()获取输入流,避免硬编码路径和路径分隔符问题 - 调用
properties.load(inputStream)解析内容;若文件含中文,需用load(new InputStreamReader(in, "UTF-8"))避免乱码 - 注意:
Properties默认只识别 ISO-8859-1,直接写中文会变成乱码或问号,建议统一用\uXXXX转义,或改用带编码的读取方式
示例:
InputStream in = getClass().getResourceAsStream("/config.properties");Properties props = new Properties();
props.load(new InputStreamReader(in, "UTF-8"));
读取与设置属性值
Properties 继承自 Hashtable,所以支持 get(key)、getProperty(key) 等方法:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
getProperty(key)更安全,返回null而非抛异常;可传默认值:props.getProperty("timeout", "3000") - 获取布尔、整数等类型需手动转换,例如:
Integer.parseInt(props.getProperty("port", "8080")) - 键名区分大小写,且不能含空格或特殊符号(除非用反斜杠转义)
保存配置到 .properties 文件
调用 store() 方法写入文件,注意以下几点:
- 输出流必须是
FileOutputStream或其他支持写入的流;路径不存在时需提前创建父目录 - 默认注释行用 ISO-8859-1,中文会乱码;改用
store(new OutputStreamWriter(out, "UTF-8"), comment)并确保 JDK ≥ 1.8(否则部分版本不支持) - 保存时不会保留原有注释和空行,
Properties只管键值对,原始格式会丢失
示例:
try (OutputStream out = new FileOutputStream("config.properties")) {props.store(new OutputStreamWriter(out, "UTF-8"), "Updated on " + new Date());
}
进阶提示:处理中文和模块化配置
如果项目中大量使用中文配置,建议:
- 统一用
native2ascii工具预处理(不推荐,维护成本高) - 或改用第三方库如
Apache Commons Configuration,支持自动编码识别和多格式(XML、JSON、YAML) - 按功能拆分多个 properties 文件(如
db.properties、mail.properties),用不同Properties实例分别加载
不复杂但容易忽略编码和路径问题,只要规范流程,日常配置管理足够稳定可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










