Java中Properties类是Hashtable子类,用于操作.properties文件,支持加载、读取、修改和保存键值对,默认ISO-8859-1编码;可从classpath或文件路径加载,用getProperty()获取、setProperty()设置、remove()删除键值;store()保存为ISO编码(中文转义),UTF-8需配合InputStreamReader指定编码加载。

Java 中的 Properties 类是操作 .properties 配置文件最常用的方式,它本质是 Hashtable 的子类,天然支持键值对的加载、读取、修改和保存,且默认使用 ISO-8859-1 编码(中文需注意转义或改用其他方式处理)。
加载配置文件(从 classpath 或文件路径)
Properties 支持从输入流加载,常见方式有:
- 从 classpath 加载(推荐用于资源文件,如
config.properties放在src/main/resources):
Properties props = new Properties();
try (InputStream is = MyClass.class.getClassLoader().getResourceAsStream("config.properties")) {
if (is != null) {
props.load(is); // 自动按 ISO-8859-1 解析
}
} catch (IOException e) {
e.printStackTrace();
}
- 从本地文件路径加载(需确保路径存在且有读权限):
Properties props = new Properties();
try (FileInputStream fis = new FileInputStream("/path/to/config.properties")) {
props.load(fis);
} catch (IOException e) {
e.printStackTrace();
}
读取和修改键值对
Properties 提供了类型安全的 get 方法(返回 String),也支持直接用 get() 或 getProperty():
-
props.getProperty("key"):安全获取,未找到返回null,可指定默认值:props.getProperty("key", "default") -
props.setProperty("key", "new_value"):设置或覆盖键值(会自动转为字符串) -
props.remove("key"):删除某个键
示例:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
String url = props.getProperty("db.url");
props.setProperty("db.timeout", "30000");
props.remove("debug.mode");
保存修改后的配置到文件
调用 store() 方法写入文件,第二个参数是注释(可为 null 或空字符串):
- 保存为 ISO-8859-1 编码(中文会变成 Unicode 转义,如
\u4F60\u597D):
try (FileOutputStream fos = new FileOutputStream("config.properties")) {
props.store(fos, "Updated on " + new Date());
}
- 若需保留原始中文(不转义),可用
storeToXML()或配合Writer指定 UTF-8(但标准load()不支持 UTF-8 输入流,需自行处理编码):
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("config.properties"), StandardCharsets.UTF_8)) {
props.store(writer, "UTF-8 config");
}
⚠️ 注意:用 UTF-8 写入后,后续加载时必须也用 UTF-8 输入流 + load(new InputStreamReader(..., "UTF-8")),否则中文乱码。
处理中文键值的实用建议
标准 Properties.load() 只认 ISO-8859-1,所以常见做法有:
- 在 .properties 文件中用
\uXXXX手动转义中文(IDE 通常可自动转换) - 统一用 UTF-8 流加载:自定义工具方法封装
load(Reader),避免硬编码 - 生产环境更推荐用
ResourceBundle(适合多语言)或现代配置库(如 Apache Commons Configuration、Spring Boot 的@ConfigurationProperties)
简单封装 UTF-8 加载示例:
public static void loadUtf8(Properties props, String fileName) throws IOException {
try (InputStream is = MyClass.class.getClassLoader().getResourceAsStream(fileName)) {
if (is != null) {
props.load(new InputStreamReader(is, StandardCharsets.UTF_8));
}
}
}

















