Properties 文件是 Java 中一种非常常用的配置文件格式,它主要用于在应用程序中存储配置信息,如数据库连接信息、API 密钥、功能开关等。

基本语法
Properties 文件的格式非常简单,主要由“键=值”对组成。
键和值
- 格式:
key = value key(键):唯一的标识符,用来查找对应的值,通常使用有意义的字符串,database.url。value(值):与键关联的数据,可以是字符串、数字、布尔值等,但在文件中它们都表示为字符串形式。- 分隔符:键和值之间使用等号 或者冒号 分隔,虽然两者都支持,但 等号 是更标准和推荐 的使用方式。
- 空格:在 或 前后的空格会被忽略。
name = John Doe和name=John Doe是等价的。
示例:
# 这是一个注释 database.url = jdbc:mysql://localhost:3306/mydb database.user = admin database.password = secret123
注释
- 以井号 或者感叹号 开头的行被视为注释。
- 注释行会被 Properties 解析器忽略,不会作为键值对读取。
示例:
# 设置服务器端口 server.port = 8080 ! 另一种注释方式,用于提醒API密钥的重要性 api.key = AIzaSyBxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
特殊字符和转义
- Properties 文件支持一些特殊的转义字符,用来在值中包含无法直接输入的字符。
\: 反斜杠本身\t: 制表符\n: 换行符\r: 回车符\uxxxx: Unicode 字符,\u4e2d\u6587表示 "中文"
示例:

# 包含路径的值 file.path = C:\\Users\\Admin\\Documents\\file.txt # 包含换行符的值 message.line1 = Hello\nmessage.line2 = World # 包含Unicode字符的值 welcome.message = \u6b22\u8fce\u4f7f\u7528\u672c\u7cfb\u7edf
多行值
Properties 文件本身不直接支持多行字符串,如果需要一个值跨越多行,通常有以下几种处理方式:
- 在每行末尾使用反斜杠
\:表示该行与下一行是连接的。 - 手动将换行符
\n或\r\n写入值中。
示例 (使用反斜杠连接):
long.message = 这是一个非常长的消息, \ 它需要跨越多行 \ 以便于阅读。
读取到的 long.message 的值将是:这是一个非常长的消息,它需要跨越多行以便于阅读。
示例 (手动写入换行符):

long.message = 这是第一行,\n这是第二行。
如何加载和使用 Properties 文件
在 Java 中,通常使用 java.util.Properties 类来加载和操作 .properties 文件。
从文件系统加载
假设你有一个文件 config.properties如下:
config.properties
app.name = My Cool App app.version = 1.0.0 debug.mode = true
Java 代码示例:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesExample {
public static void main(String[] args) {
// 1. 创建 Properties 对象
Properties props = new Properties();
// 使用 try-with-resources 确保 InputStream 被正确关闭
try (InputStream input = new FileInputStream("config.properties")) {
// 2. 加载 properties 文件
props.load(input);
// 3. 通过键获取值 (注意:所有值都是 String 类型)
String appName = props.getProperty("app.name");
String appVersion = props.getProperty("app.version");
String debugModeStr = props.getProperty("debug.mode");
// 4. 如果需要其他类型,可以进行转换
boolean debugMode = Boolean.parseBoolean(debugModeStr);
System.out.println("应用名称: " + appName);
System.out.println("应用版本: " + appVersion);
System.out.println("调试模式: " + debugMode);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
从类路径 加载 (推荐)
在 Java 项目中,通常将配置文件放在 src/main/resources 目录下,这样它会被自动打包到类路径中。
Java 代码示例:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesFromClasspath {
public static void main(String[] args) {
Properties props = new Properties();
// 使用 ClassLoader 加载资源文件
try (InputStream input = PropertiesFromClasspath.class.getClassLoader().getResourceAsStream("config.properties")) {
if (input == null) {
System.out.println("抱歉,无法找到 config.properties");
return;
}
props.load(input);
// ... 使用属性 ...
System.out.println("从类路径加载的应用名称: " + props.getProperty("app.name"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Properties 类的常用方法
| 方法 | 描述 |
|---|---|
load(InputStream inStream) |
从输入流中加载属性列表。 |
store(OutputStream out, String comments) |
将属性列表写入输出流,并可以添加注释。 |
getProperty(String key) |
使用指定的键在此属性列表中搜索属性,如果找不到,则返回 null。 |
getProperty(String key, String defaultValue) |
使用指定的键搜索属性,如果找不到,则返回指定的默认值。 |
setProperty(String key, String value) |
设置指定键的值,如果键已存在,则覆盖其值。 |
String getProperty(String key) |
获取指定键的值。 |
void list(PrintStream out) |
将属性列表打印到指定的输出流。 |
示例:getProperty 的默认值用法
Properties props = new Properties();
props.load(...);
// "timeout" 键不存在,则默认返回 "30"
String timeout = props.getProperty("timeout", "30");
int timeoutSeconds = Integer.parseInt(timeout);
System.out.println("超时时间: " + timeoutSeconds + " 秒");
最佳实践
- 命名规范:文件名通常使用小写字母,
database.properties,application.properties。 - 使用类路径:将配置文件放在
src/main/resources目录下,使其成为项目的一部分,便于打包和部署。 - 编码:始终确保你的
.properties文件以 UTF-8 编码保存,以避免处理中文或其他非 ASCII 字符时出现乱码。 - 敏感信息:不要将密码、API密钥等敏感信息直接硬编码在 Properties 文件中,应考虑使用环境变量、加密文件或专门的配置管理工具(如 Vault)。
- 提供默认值:使用
getProperty(key, defaultValue)方法,让你的程序在配置缺失时也能优雅地降级运行,而不是直接崩溃。
现代替代方案
虽然 Properties 文件非常经典,但在现代 Java 项目中,也出现了更强大的配置文件格式,
- YAML (
.yaml/.yml):可读性更强,支持更复杂的数据结构(如列表、嵌套对象),非常适合大型和复杂的配置,Spring Boot 等框架广泛使用 YAML。 - JSON (
.json):也是一种流行的选择,可以被轻松地映射到 Java 对象。 - HOCON:Human-Optimized Config Object Notation,是 JSON 的超集,更灵活,支持注释和未加引号的字符串。
对于大多数简单的 Spring Boot 应用,application.properties 或 application.yml 是最常见的配置文件格式。
