標準項目結構
src/
└─ config/
└─ app.properties # 內容:name=kaka\nage=28
核心代碼
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigLoader {
public static void main(String[] args) {
Properties props = new Properties();
try (InputStream in = ConfigLoader.class.getResourceAsStream("/config/app.properties")) {
if (in == null) throw new IllegalStateException("配置文件未找到");
props.load(in);
} catch (IOException e) {
throw new RuntimeException("讀取配置失敗", e);
}
System.out.println("name: " + props.getProperty("name"));
System.out.println("age: " + props.getProperty("age"));
}
}
關鍵點解析
getResourceAsStream("/config/app.properties"):絕對路徑以 / 開頭,從 classpath 根目錄查找
try-with-resources 自動關閉流,避免洩漏(Java 7+)
props.getProperty(key) 返回 null 若鍵不存在,可用 getProperty(key, defaultVal) 提供默認值
- 編碼問題:Properties 默認 ISO-8859-1,含中文建議改用
load(new InputStreamReader(in, StandardCharsets.UTF_8))
進階用法
- 多環境隔離:
app-dev.properties / app-prod.properties,啟動時指定 -Dspring.profiles.active=dev
- 類型安全綁定:Spring
@ConfigurationProperties 或 @Value("${key}") 直接注入 Bean
- 熱加載:結合
WatchService 監聽文件變更自動刷新
常見坑點避雷
- 路徑寫錯(漏
/ 或大小寫不符)導致 NullPointerException
- 打包成 JAR 時未將 resources 目錄納入 classpath
- 屬性值尾部空格被誤讀入,建議
.trim()