在Java项目开发中,配置文件通常用于存储数据库连接信息、服务地址、功能开关等可变参数,避免将这些参数硬编码在代码里。编写一个通用的配置文件读取工具,能够统一配置读取逻辑,减少重复代码,提升项目的可维护性。

核心实现思路
Java中最常用的配置文件格式是.properties,基于键值对存储,JDK自带的java.util.Properties类已经提供了基础的读取能力。我们编写工具类的核心目标是对Properties的读取逻辑进行封装,支持指定配置文件路径、获取不同类型配置值、处理配置缺失等场景。
基础工具类实现
以下是一个支持读取classpath下properties文件的基础工具类实现:
import java.io.InputStream;
import java.util.Properties;
public class ConfigReader {
// 存储配置文件内容的Properties对象
private Properties properties;
/**
* 构造方法,传入配置文件名称,自动从classpath加载
* @param fileName 配置文件名称,例如 config.properties
*/
public ConfigReader(String fileName) {
properties = new Properties();
// 从类路径获取配置文件的输入流
try (InputStream inputStream = ConfigReader.class.getClassLoader().getResourceAsStream(fileName)) {
if (inputStream == null) {
throw new RuntimeException("未找到配置文件:" + fileName);
}
// 加载配置文件内容
properties.load(inputStream);
} catch (Exception e) {
throw new RuntimeException("加载配置文件失败:" + fileName, e);
}
}
/**
* 获取字符串类型的配置值
* @param key 配置键
* @return 配置值,不存在则返回null
*/
public String getString(String key) {
return properties.getProperty(key);
}
/**
* 获取字符串类型的配置值,可指定默认值
* @param key 配置键
* @param defaultValue 默认值
* @return 配置值,不存在则返回默认值
*/
public String getString(String key, String defaultValue) {
return properties.getProperty(key, defaultValue);
}
/**
* 获取整数类型的配置值
* @param key 配置键
* @return 整数配置值
* @throws NumberFormatException 配置值无法转换为整数时抛出
*/
public int getInt(String key) {
String value = getString(key);
if (value == null) {
throw new RuntimeException("配置项" + key + "不存在");
}
return Integer.parseInt(value);
}
/**
* 获取整数类型的配置值,可指定默认值
* @param key 配置键
* @param defaultValue 默认值
* @return 整数配置值,不存在则返回默认值
*/
public int getInt(String key, int defaultValue) {
String value = getString(key);
if (value == null) {
return defaultValue;
}
return Integer.parseInt(value);
}
/**
* 获取布尔类型的配置值
* @param key 配置键
* @return 布尔配置值,true/1/y/yes(不区分大小写)返回true,其他返回false
*/
public boolean getBoolean(String key) {
String value = getString(key);
if (value == null) {
return false;
}
String lowerValue = value.toLowerCase();
return "true".equals(lowerValue) || "1".equals(lowerValue) || "y".equals(lowerValue) || "yes".equals(lowerValue);
}
}
使用示例
假设我们在resources目录下有一个app.properties配置文件,内容如下:
# 数据库配置 db.url=jdbc:mysql://127.0.0.1:3306/test_db db.username=root db.password=123456 # 服务端口 server.port=8080 # 功能开关 feature.enable=true
使用上述工具类读取配置的代码如下:
public class Main {
public static void main(String[] args) {
// 初始化配置读取工具,加载app.properties
ConfigReader configReader = new ConfigReader("app.properties");
// 读取字符串配置
String dbUrl = configReader.getString("db.url");
System.out.println("数据库地址:" + dbUrl);
// 读取整数配置,指定默认值
int serverPort = configReader.getInt("server.port", 8081);
System.out.println("服务端口:" + serverPort);
// 读取布尔配置
boolean featureEnable = configReader.getBoolean("feature.enable");
System.out.println("功能开关状态:" + featureEnable);
// 读取不存在的配置,使用默认值
String logPath = configReader.getString("log.path", "/var/log/app.log");
System.out.println("日志路径:" + logPath);
}
}
工具类优化方向
基础工具类已经能满足大部分简单场景的需求,实际项目中还可以根据需求做进一步优化:
- 支持多配置文件加载,比如同时加载默认配置和用户自定义配置,自定义配置优先级更高
- 增加配置热更新能力,监听配置文件变化,自动重新加载配置内容,不需要重启应用
- 支持更多配置格式,比如
YAML格式,需要引入对应的解析依赖,比如snakeyaml - 增加配置校验逻辑,在加载配置时校验必填配置是否存在,避免运行时才发现问题
注意事项
编写配置文件读取工具时需要注意几个问题:
配置文件不要存储敏感信息,比如生产环境的数据库密码,敏感信息建议使用环境变量或者专门的密钥管理工具存储。
另外,Properties类本身不支持中文的自动转义,如果properties文件中有中文内容,需要保证文件编码是UTF-8,并且在加载时使用InputStreamReader指定编码,避免中文乱码问题。修改后的构造方法片段如下:
// 加载配置文件内容,指定UTF-8编码 properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
最后,工具类建议设计成单例模式或者静态方法形式,避免重复创建Properties对象,提升性能。
Java配置文件读取配置管理Properties工具类修改时间:2026-07-22 17:57:31