首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 讀取配置文件最佳實踐:Properties 與字符流完美處理中文亂碼

     編輯:Java 綜合教學

核心結論:必須用字符流讀取含中文的 properties

Properties.load(InputStream) 使用 ISO-8859-1 解碼,中文會亂碼;Properties.load(Reader) 使用文件實際編碼(如 UTF-8),完美支持中文鍵值。

標準代碼範本

Properties props = new Properties();
try (FileReader reader = new FileReader("config.properties")) { // 自動用默認編碼
    props.load(reader);
    // 遍歷所有鍵值
    props.stringPropertyNames().forEach(key -> 
        System.out.println(key + "=" + props.getProperty(key)));
} catch (IOException e) {
    e.printStackTrace();
}

配置文件寫法規範

# config.properties
# 空格、冒號、等號需轉義
user\ name = zhangsan
password = 123456
chinese\ key = 中文值
url = jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8
  • 鍵值包含空格、:、= 時前加 \ 轉義。
  • 中文鍵值直接寫入,文件保存為 UTF-8 無 BOM。

字節流對比演示(僅供理解,生產禁用)

// 錯誤示範:中文鍵值讀出為亂碼
try (InputStream in = new BufferedInputStream(new FileInputStream("config.properties"))) {
    props.load(in); // ISO-8859-1 解碼
    System.out.println(props.getProperty("chinese\ key")); // 亂碼
}

進階:多環境配置隔離

// application-dev.properties
db.url=jdbc:mysql://dev:3306/app
// application-prod.properties
db.url=jdbc:mysql://prod:3306/app

// 代碼中根據啟動參數動態加載
String env = System.getProperty("env", "dev");
try (FileReader r = new FileReader("application-" + env + ".properties")) {
    props.load(r);
}

最佳實踐清單

  1. 統一使用 FileReader / InputStreamReader(StandardCharsets.UTF_8)。
  2. 配置文件編碼鎖定 UTF-8,IDE 設置 File Encodings → UTF-8。
  3. 敏感信息(密鑰、密碼)勿提交倉庫,用環境變量或加密配置中心注入。
  4. 大型專案引入 @ConfigurationProperties (Spring Boot) 或 Apache Commons Configuration 實現類型安全綁定與熱加載。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved