Properties类是Java中专为字符串键值对持久化设计的轻量级配置工具,适合管理少量、变动不频繁的配置项;它继承自Hashtable,强制key和value为String类型,通过load()/store()与IO流深度绑定,支持自动编码处理、注释和Unicode转义,推荐使用setProperty()、getProperty()和stringPropertyNames()确保类型安全与跨平台兼容。

Properties 类是 Java 中专为字符串键值对持久化设计的轻量级配置工具,适合管理少量、变动不频繁的配置项(如路径、开关、基础参数),无需数据库或复杂框架。
Properties 的核心特点
它继承自 Hashtable,但强制要求 key 和 value 都是 String 类型;不是泛型集合,但天然适配配置场景。它与 IO 流深度绑定——load() 从文件读取,store() 向文件写入,整个过程自动处理编码和格式(如等号分隔、# 注释、Unicode 转义)。
注意:不要用 put(Object, Object) 方法插入非 String 类型,否则运行时可能出错;应始终使用 setProperty(String, String)。
读取已有 .properties 文件
典型流程是通过类路径或绝对路径获取输入流,再调用 load() 加载:
- 推荐用
ClassLoader.getResourceAsStream("config.properties"),便于打包后仍可定位资源 - 若用
FileReader,需确保路径存在且编码为 ISO-8859-1(含中文时建议改用InputStream+load(),避免乱码) - 加载后直接用 getProperty("key") 获取值,支持提供默认返回值,例如
props.getProperty("timeout", "3000")
保存配置到文本文件
用 store() 写出时有两个常用重载:
-
store(Writer writer, String comments):推荐用 FileWriter,支持中文注释(comments 参数建议留空或只用 ASCII 字符,否则可能乱码) -
store(OutputStream out, String comments):底层按 ISO-8859-1 编码,中文会转成 \uXXXX 形式,适合跨平台兼容场景 - 生成的文件自带时间戳和注释行,格式清晰,人工可读可编辑,例如:
#save settings
#Sat May 10 16:20:30 CST 2026
filename=a.txt
length=209385038
遍历与安全访问
不建议用 keySet()(来自 Hashtable),而应使用专有方法 stringPropertyNames(),它只返回 key 和 value 均为 String 的键名集合,更准确、更安全:
- 遍历时用
for (String key : props.stringPropertyNames()) - 取值统一用
props.getProperty(key),不会发生类型强转异常 - 如需检查某配置是否存在,直接判断
getProperty("key") != null即可,无需先 containsKey

















