java读取properties文件推荐用类加载器获取classpath资源流再load,写入仅支持本地文件系统并注意编码;中文处理可用unicode转义、手动指定utf-8编码或storetoxml;框架中优先使用@configurationproperties而非手动操作。

Java 中读取和写入 Properties 配置文件,核心是使用 java.util.Properties 类,它本质是 Hashtable 的子类,专为键值对文本配置设计,天然支持 ISO-8859-1 编码(中文需转义或改用其他方式处理)。
读取 Properties 文件(从 classpath 或磁盘)
常见场景是从 classpath 加载(如 application.properties),推荐用类加载器获取输入流,避免路径错误:
- 用
getClass().getClassLoader().getResourceAsStream("config.properties")获取流,再调用properties.load(input) - 若文件在磁盘绝对路径,可用
new FileInputStream("/path/to/config.properties"),但注意异常处理和资源关闭 - 读取后通过
getProperty("key")获取值;未找到时可传默认值,如getProperty("timeout", "3000")
写入 Properties 文件(保存到磁盘)
Properties 本身不直接支持写入 classpath 资源,只能写入本地文件系统:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 用
FileOutputStream指定目标文件路径,调用store(output, comment)写入,comment 会作为头部注释 - 注意:
store()默认使用 ISO-8859-1 编码,中文会自动转成\uXXXX形式;如需明文中文,可改用storeToXML()或自定义 UTF-8 输出(需手动处理编码) - 写入前建议先创建父目录:
file.getParentFile().mkdirs(),防止因路径不存在导致 IOException
处理中文与编码问题
标准 load()/store() 对中文不友好,有几种实用方案:
- 保持传统方式:中文用 Unicode 转义(如
name=\u4F60\u597D),IDE 通常能自动转换或显示原文 - 用
load(new InputStreamReader(is, "UTF-8"))和store(new OutputStreamWriter(os, "UTF-8"), comment)手动指定编码(Java 7+ 支持) - 改用
storeToXML()/loadFromXML(),生成 XML 格式,天然支持 UTF-8,内容可读性好且无转义烦恼
配合 Spring Boot 等框架的注意事项
在现代框架中,手写 Properties 读写较少,但理解底层仍有价值:
- Spring Boot 默认加载
application.properties到 Environment,无需手动 load;自定义配置建议用@ConfigurationProperties绑定对象 - 若需运行时动态修改并持久化配置(如管理后台更新参数),仍需自己实现 store 逻辑,并注意线程安全与文件锁问题
- 多环境配置(dev/test/prod)推荐用 profile 分离文件,而非在代码里 if-else 切换 load 路径
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










