Java Property文件读取指南
在Java中读取.properties文件是常见的配置文件读取操作,以下是几种常用的方法:

(图片来源网络,侵删)
使用java.util.Properties类
这是最基本也是最常用的方法:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertyReader {
public static void main(String[] args) {
Properties prop = new Properties();
InputStream input = null;
try {
// 使用绝对路径
input = new FileInputStream("config.properties");
// 或者使用类路径下的文件(推荐)
// input = PropertyReader.class.getClassLoader().getResourceAsStream("config.properties");
// 加载属性文件
prop.load(input);
// 读取属性值
String dbUrl = prop.getProperty("database.url");
String dbUser = prop.getProperty("database.user");
String dbPassword = prop.getProperty("database.password");
System.out.println("Database URL: " + dbUrl);
System.out.println("Database User: " + dbUser);
System.out.println("Database Password: " + dbPassword);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用java.util.ResourceBundle类
这种方法更适合国际化,但也可以用于读取普通属性文件:
import java.util.ResourceBundle;
public class ResourceBundleExample {
public static void main(String[] args) {
// 假设config.properties在类路径根目录下
ResourceBundle rb = ResourceBundle.getBundle("config");
String dbUrl = rb.getString("database.url");
String dbUser = rb.getString("database.user");
String dbPassword = rb.getString("database.password");
System.out.println("Database URL: " + dbUrl);
System.out.println("Database User: " + dbUser);
System.out.println("Database Password: " + dbPassword);
}
}
使用Spring框架的@Value注解(Spring环境)
如果使用Spring框架,可以更方便地注入属性值:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SpringPropertyReader {
@Value("${database.url}")
private String dbUrl;
@Value("${database.user}")
private String dbUser;
@Value("${database.password}")
private String dbPassword;
public void printProperties() {
System.out.println("Database URL: " + dbUrl);
System.out.println("Database User: " + dbUser);
System.out.println("Database Password: " + dbPassword);
}
}
需要在Spring配置中启用属性文件:

(图片来源网络,侵删)
@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {
// 配置类内容
}
使用Apache Commons Configuration
对于更复杂的配置需求,可以使用Apache Commons Configuration库:
import org.apache.commons.configuration2.Configuration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.ex.ConfigurationException;
public class CommonsConfigExample {
public static void main(String[] args) {
Parameters params = new Parameters();
FileBasedConfigurationBuilder<Configuration> builder =
new FileBasedConfigurationBuilder<>(Configuration.class)
.configure(params.properties().setFileName("config.properties"));
try {
Configuration config = builder.getConfiguration();
String dbUrl = config.getString("database.url");
String dbUser = config.getString("database.user");
String dbPassword = config.getString("database.password");
System.out.println("Database URL: " + dbUrl);
System.out.println("Database User: " + dbUser);
System.out.println("Database Password: " + dbPassword);
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
最佳实践建议
- 使用类路径加载:推荐使用
getClassLoader().getResourceAsStream()方法,这样属性文件可以打包在jar中 - 处理异常:始终正确处理可能出现的IO异常
- 默认值:使用
getProperty(String key, String defaultValue)方法提供默认值 - 文件位置:将属性文件放在
src/main/resources目录下,这样Maven/Gradle会自动将其放入类路径 - 敏感信息:不要在属性文件中存储密码等敏感信息,考虑使用环境变量或专门的配置管理工具
示例属性文件内容(config.properties)
database.url=jdbc:mysql://localhost:3306/mydb
database.user=admin
database.password=secret
选择哪种方法取决于你的具体需求和项目环境,对于简单的Java项目,java.util.Properties是最直接的选择;对于Spring项目,@Value注解非常方便;对于复杂的配置需求,可以考虑Apache Commons Configuration。

(图片来源网络,侵删)
