properties对象
在 Java 编程中,java.util.Properties
是一个专门用于处理键值对配置文件的类,它继承自 Hashtable<Object,Object>
,但强制要求键值对均为字符串类型(实际是 Hashtable<String,String>
)。以下是其核心特性和使用场景:
一、核心特性
-
键值对存储
- 以
key=value
格式存储数据(类似.ini
或.properties
文件) - 示例:
user.name=John
,database.port=3306
- 以
-
文件 IO 支持
- 可直接通过
load()
方法从输入流(如文件、网络资源)加载配置 - 通过
store()
方法将配置持久化到文件
// 加载配置文件 try (InputStream input = new FileInputStream("config.properties")) { Properties prop = new Properties(); prop.load(input); } // 保存配置文件 try (OutputStream output = new FileOutputStream("config.properties")) { prop.store(output, "Database configuration"); }
- 可直接通过
-
编码处理
- 默认使用 ISO 8859-1 编码(可能需注意中文乱码问题)
- 推荐使用
load(Reader)
/store(Writer)
方法指定编码:
prop.load(new InputStreamReader(input, "UTF-8"));
-
层次化访问
- 支持通过
Properties
对象链式继承(defaults
属性)
Properties defaults = new Properties(); defaults.setProperty("timeout", "30"); Properties prop = new Properties(defaults); // 继承默认值
- 支持通过
二、典型应用场景
-
配置文件管理
- 管理数据库连接参数、API 密钥、日志级别等
- 示例
config.properties
:# Database settings db.url=jdbc:mysql://localhost:3306/mydb db.user=root db.password=secret
-
国际化支持
- 加载不同语言资源文件(如
messages_en.properties
、messages_zh.properties
)
- 加载不同语言资源文件(如
-
系统属性扩展
- 与
System.getProperties()
配合使用,扩展 JVM 参数
- 与
三、注意事项
-
线程安全
- 由于继承自
Hashtable
,Properties
是线程安全的,但频繁同步可能影响性能
- 由于继承自
-
资源释放
- 必须显式关闭
InputStream
/OutputStream
(推荐 try-with-resources)
- 必须显式关闭
-
类型局限
- 仅支持字符串类型,复杂数据类型需手动转换:
int timeout = Integer.parseInt(prop.getProperty("timeout"));
-
替代方案
- XML 配置:更结构化,但解析复杂
- YAML/JSON:层次化数据友好(需第三方库如 Jackson、SnakeYAML)
- 环境变量:适用于容器化部署(如 Docker)
四、代码示例
// 读取配置
Properties prop = new Properties();
try (InputStream input = getClass().getClassLoader().getResourceAsStream("app.properties")) {
prop.load(input);
String dbUrl = prop.getProperty("db.url");
String dbUser = prop.getProperty("db.user", "admin"); // 带默认值
} catch (IOException ex) {
ex.printStackTrace();
}
// 动态修改配置
prop.setProperty("cache.enabled", "true");
try (OutputStream output = new FileOutputStream("app.properties")) {
prop.store(output, "Updated cache settings");
}
五、替代工具推荐
场景 | 推荐工具 | 优势 |
---|---|---|
复杂层级配置 | Apache Commons Configuration | 支持 XML、JSON、INI 等多种格式 |
云原生配置 | Spring Cloud Config | 集中化管理,动态刷新 |
高性能键值存储 | Redis | 内存数据库,支持分布式 |
Properties
是 Java 生态中轻量级配置管理的基石,适合简单场景,但在复杂工程中建议结合具体需求选择更专业的配置管理方案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-02-22 迅雷提示“下载引擎未启动 无法继续下载”的解决办法
2019-02-22 ubuntu系统中java -version所显示的版本与/etc/profile中配置的$JAVA_HOME的关系
2019-02-22 开发人员如何从官网首页进入下载JDK历史版本
2019-02-22 Older Versions Of Eclipse
2011-02-22 改IE,fire fox默认查看网页源代码程序