杰瑞科技汇

Java properties格式有哪些核心规则与注意事项?

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

Java properties格式有哪些核心规则与注意事项?-图1
(图片来源网络,侵删)

基本语法

Properties 文件的格式非常简单,主要由“键=值”对组成。

键和值

  • 格式key = value
  • key (键):唯一的标识符,用来查找对应的值,通常使用有意义的字符串,database.url
  • value (值):与键关联的数据,可以是字符串、数字、布尔值等,但在文件中它们都表示为字符串形式。
  • 分隔符:键和值之间使用等号 或者冒号 分隔,虽然两者都支持,但 等号 是更标准和推荐 的使用方式。
  • 空格:在 或 前后的空格会被忽略。name = John Doename=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 表示 "中文"

示例:

Java properties格式有哪些核心规则与注意事项?-图2
(图片来源网络,侵删)
# 包含路径的值
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 文件本身不直接支持多行字符串,如果需要一个值跨越多行,通常有以下几种处理方式:

  1. 在每行末尾使用反斜杠 \:表示该行与下一行是连接的。
  2. 手动将换行符 \n\r\n 写入值中

示例 (使用反斜杠连接):

long.message = 这是一个非常长的消息, \
它需要跨越多行 \
以便于阅读。

读取到的 long.message 的值将是:这是一个非常长的消息,它需要跨越多行以便于阅读。

示例 (手动写入换行符):

Java properties格式有哪些核心规则与注意事项?-图3
(图片来源网络,侵删)
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 + " 秒");

最佳实践

  1. 命名规范:文件名通常使用小写字母,database.properties, application.properties
  2. 使用类路径:将配置文件放在 src/main/resources 目录下,使其成为项目的一部分,便于打包和部署。
  3. 编码:始终确保你的 .properties 文件以 UTF-8 编码保存,以避免处理中文或其他非 ASCII 字符时出现乱码。
  4. 敏感信息不要将密码、API密钥等敏感信息直接硬编码在 Properties 文件中,应考虑使用环境变量、加密文件或专门的配置管理工具(如 Vault)。
  5. 提供默认值:使用 getProperty(key, defaultValue) 方法,让你的程序在配置缺失时也能优雅地降级运行,而不是直接崩溃。

现代替代方案

虽然 Properties 文件非常经典,但在现代 Java 项目中,也出现了更强大的配置文件格式,

  • YAML (.yaml / .yml):可读性更强,支持更复杂的数据结构(如列表、嵌套对象),非常适合大型和复杂的配置,Spring Boot 等框架广泛使用 YAML。
  • JSON (.json):也是一种流行的选择,可以被轻松地映射到 Java 对象。
  • HOCON:Human-Optimized Config Object Notation,是 JSON 的超集,更灵活,支持注释和未加引号的字符串。

对于大多数简单的 Spring Boot 应用,application.propertiesapplication.yml 是最常见的配置文件格式。

分享:
扫描分享到社交APP
上一篇
下一篇