Java讀取Properties文件時(shí)保持順序的解決過(guò)程
更新時(shí)間:2025年11月10日 08:54:57 作者:大大怪~將軍
文章講述了解決Java中Properties文件讀取時(shí)中文亂碼問(wèn)題的幾種方法,包括重寫Properties的put方法、拓展記錄解決ResourceBundle讀取properties中文亂碼問(wèn)題等
1、解決方法
Properties props = new LinkedProperties();
try (InputStream is = resource.getInputStream()) {
props.load(new InputStreamReader(is, StandardCharsets.UTF_8)); // 保證UTF-8讀取
}
Map<String, String> messages = new LinkedHashMap<>();
for (String key : props.stringPropertyNames()) {
messages.put(key, props.getProperty(key));
}2、重寫Properties 的put方法
import org.jetbrains.annotations.NotNull;
import java.util.*;
/**
* 重寫Properties 的put 方法,為了讓 LinkedProperties 讀取的國(guó)際化的文件內(nèi)容順序顯示
*/
public class LinkedProperties extends Properties {
private static final long serialVersionUID = 1L;
private final LinkedHashSet<Object> keys = new LinkedHashSet<>();
@Override
public synchronized Object put(Object key, Object value) {
keys.add(key);
return super.put(key, value);
}
@Override
public Set<String> stringPropertyNames() {
Set<String> set = new LinkedHashSet<>();
for (Object obj : keys) {
set.add((String) obj);
}
return set;
}
@NotNull
@Override
public Set<Object> keySet() {
return this.keys;
}
@Override
public Enumeration<Object> keys() {
return Collections.enumeration(keys);
}
}
3、拓展記錄
解決 ResourceBundle 讀取properties 中文亂碼問(wèn)題
import org.jetbrains.annotations.NotNull;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class UTF8Control extends ResourceBundle.Control {
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format,
ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, "properties");
try (InputStream stream = loader.getResourceAsStream(resourceName)) {
if (stream == null) return null;
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
Properties props = new Properties();
props.load(reader);
return new ResourceBundle() {
@Override
protected Object handleGetObject(@NotNull String key) {
return props.getProperty(key);
}
@NotNull
@Override
public Enumeration<String> getKeys() {
return Collections.enumeration(props.stringPropertyNames());
}
};
}
}
}
}
4、使用
// ResourceBundle bundle = ResourceBundle.getBundle(baseName, new UTF8Control());
// Map<String, String> messages = new ConcurrentHashMap<>();
// for (String key : bundle.keySet()) {
// messages.put(key, bundle.getString(key));
// }
// cachedMessages.put(bundle.getLocale(), messages);總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享功能
這篇文章主要介紹了多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
jfinal添加jcaptcha驗(yàn)證碼實(shí)現(xiàn)方法
這篇文章主要介紹了jfinal的jcaptcha驗(yàn)證碼實(shí)現(xiàn)方法,大家參考使用吧2014-01-01
實(shí)例詳解SpringBoot默認(rèn)的JSON解析方案
JSON數(shù)據(jù)現(xiàn)在是我們開發(fā)中用的最多的,百分之九十的數(shù)據(jù)都是通過(guò)JSON方式進(jìn)行傳輸,下面這篇文章主要給大家介紹了關(guān)于SpringBoot默認(rèn)的JSON解析方案的相關(guān)資料,需要的朋友可以參考下2021-08-08
elasticsearch中term與match的區(qū)別講解
今天小編就為大家分享一篇關(guān)于elasticsearch中term與match的區(qū)別講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
Java調(diào)用windows系統(tǒng)的CMD命令并啟動(dòng)新程序
本文教你如何使用java程序調(diào)用windows系統(tǒng)的CMD命令啟動(dòng)新程序方法,需要的朋友可以參考下2023-05-05
JPA @Query時(shí),無(wú)法使用limit函數(shù)的問(wèn)題及解決
這篇文章主要介紹了JPA @Query時(shí),無(wú)法使用limit函數(shù)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

