配置文件含中文時,必須使用字符流(Reader);字節流會導致中文亂碼,因為漢字佔 2 字節,字節流按單字節讀取會破壞字符邊界。
# b.properties
family\ name = zhou
second name = dingzhao
gender = male
tel no. = +86 (-) 13913462
salary = 0.001k
職業 = java & 工程師
注意:鍵值含空格、特殊字符需用 \ 轉義。
Properties props = new Properties();
try (FileReader reader = new FileReader(
new File("I:/Workspaces/MyWork/xcserver/src/com/xiaocong/user/service/b.properties"))) {
props.load(reader);
// 獲取單個值
System.out.println(props.getProperty("family name")); // zhou
// 遍歷所有鍵值
for (String key : props.stringPropertyNames()) {
System.out.println(key + "=" + props.getProperty(key));
}
// 直接讀取中文鍵
System.out.println(props.getProperty("職業")); // java & 工程師
} catch (IOException e) {
e.printStackTrace();
}
// 會導致中文鍵/值亂碼
try (InputStream in = new BufferedInputStream(
new FileInputStream(".../a.properties"))) {
props.load(in);
// 輸出:鍵「職業」變為亂碼,值「java & 工程師」也亂碼
}
props.load(Reader/InputStream):自動解析 key=value 格式,支持 # 註釋、\ 轉義、續行。props.getProperty(key):獲取值,key 不存在返回 null。props.stringPropertyNames():返回鍵集合(泛型安全),優於舊版 propertyNames()。new InputStreamReader(inputStream, StandardCharsets.UTF_8) 顯式指定編碼,避免系統默認編碼差異。@PropertySource + Environment 或 @Value("${key}") 注入,無需手寫 IO 代碼。