Java中读写配置文件最常用Properties类,它轻量标准、专用于键值对格式,支持加载/保存、需注意UTF-8编码处理中文,线程不安全,简单项目适用。

Java中读写配置文件最常用的方式是使用Properties类,它专为处理键值对格式的文本配置文件(如app.properties)而设计,轻量、标准、无需额外依赖。
Properties的基本用法:加载和保存
Properties本质是一个继承自Hashtable的类,内部以String为键和值。它支持从输入流加载(如文件、类路径资源),也支持写入到输出流。
- 加载配置:用
load(InputStream)读取.properties文件,推荐用ClassLoader.getResourceAsStream()加载类路径下的文件 - 保存配置:用
store(OutputStream, String comments)写入文件,会自动添加时间戳和注释头 - 注意编码:默认按ISO-8859-1解析,含中文需用
load(Reader)配合InputStreamReader指定UTF-8
读取配置的常见方式
从不同位置读取配置时,路径处理很关键:
- 类路径下(推荐):
Properties props = new Properties(); props.load(getClass().getClassLoader().getResourceAsStream("config.properties")); - 文件系统绝对路径:
new FileInputStream("/etc/myapp/config.properties") - 相对路径(基于当前工作目录):
new FileInputStream("conf/app.properties"),但不建议,易受运行环境影响
读取后用getProperty(String key)获取值,可提供默认值:props.getProperty("timeout", "3000")。
立即学习“Java免费学习笔记(深入)”;
写入配置并保留中文与格式
直接用store()写入中文会出现乱码,因为默认编码是ISO-8859-1。正确做法是:
- 用
store(Writer, String)重载方法,传入UTF-8编码的OutputStreamWriter - 示例:
try (Writer w = new OutputStreamWriter(new FileOutputStream("config.properties"), StandardCharsets.UTF_8)) { props.store(w, "Updated config"); } - 若需保持原有注释或空行,
Properties本身不支持——它只保留键值对;复杂格式建议换用Apache Commons Configuration或YAML/JSON库
线程安全与替代方案提醒
Properties的方法不是线程安全的(虽然继承自Hashtable,但load/store等不加锁)。多线程频繁读写配置时:
- 建议加载后转为不可变副本(如
Map.copyOf(props)),运行时只读取 - 动态更新需求强的场景,考虑Spring Boot的
@ConfigurationProperties或第三方库如Typesafe Config - 简单项目够用,但不要把它当数据库用——不支持嵌套、数组、类型转换等高级功能










