最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java讀取Properties文件時保持順序的解決過程

 更新時間:2025年11月10日 08:54:57   作者:大大怪~將軍  
文章講述了解決Java中Properties文件讀取時中文亂碼問題的幾種方法,包括重寫Properties的put方法、拓展記錄解決ResourceBundle讀取properties中文亂碼問題等

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 讀取的國際化的文件內容順序顯示
 */
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 中文亂碼問題

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);

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java之SpringCloud nocos注冊中心講解

    Java之SpringCloud nocos注冊中心講解

    這篇文章主要介紹了Java之SpringCloud nocos注冊中心講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Java中Object類常用的12個方法(小結)

    Java中Object類常用的12個方法(小結)

    Java 中的 Object 方法在面試中是一個非常高頻的點,本文主要介紹了Java中Object類常用的12個方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • VS?Code插件Language?Support?for?Java(TM)?by?Red?Hat報錯兩種解決辦法

    VS?Code插件Language?Support?for?Java(TM)?by?Red?Hat報錯兩種

    這篇文章主要介紹了VS?Code插件Language?Support?for?Java(TM)?by?Red?Hat報錯兩種解決辦法的相關資料,第一種在setting.json中配置使用新版本JDK運行,第二種方法是切換至支持舊版本Jdk的插件版本,但不推薦,建議要確保使用最新JDK以避免兼容性問題,需要的朋友可以參考下
    2026-04-04
  • SpringBoot中攔截器和動態(tài)代理的區(qū)別詳解

    SpringBoot中攔截器和動態(tài)代理的區(qū)別詳解

    在?Spring?Boot?中,攔截器和動態(tài)代理都是用來實現功能增強的,所以在很多時候,有人會認為攔截器的底層是通過動態(tài)代理實現的,所以本文就來盤點一下他們兩的區(qū)別,以及攔截器的底層實現吧
    2023-09-09
  • idea如何開啟菜單欄

    idea如何開啟菜單欄

    文章介紹了如何通過修改IntelliJ IDEA的樣式文件`ui.lnf.xml`來重新顯示被關閉的菜單欄,并分享了解決問題的步驟
    2025-01-01
  • Java面向對象之內部類詳解

    Java面向對象之內部類詳解

    在 Java 中,允許一個類的定義位于另一個類的內部,前者稱為內部類,后者稱為外部類。這篇文章將總結一下內部類的使用,感興趣的可以了解一下
    2022-10-10
  • Java類初始化執(zhí)行流程解析

    Java類初始化執(zhí)行流程解析

    這篇文章主要介紹了Java類初始化執(zhí)行流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 解決jar包rar壓縮后無法運行問題

    解決jar包rar壓縮后無法運行問題

    這篇文章主要介紹了解決jar包rar壓縮后無法運行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java數據結構中圖的進階詳解

    Java數據結構中圖的進階詳解

    在Java學習與應用中,數據結構無疑是每個人都要接觸的難點,為了更好的學習數據結構這一塊內容,用圖來理解便是最好的方式,讓我們一起來了解本篇內容圖的進階
    2022-01-01
  • 30w+數據使用RedisTemplate?pipeline空指針NullPointerException異常分析

    30w+數據使用RedisTemplate?pipeline空指針NullPointerException異常分析

    這篇文章主要為大家介紹了30w+數據使用RedisTemplate?pipeline空指針NullPointerException異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論

社会| 日照市| 广安市| 洛隆县| 徐州市| 泸溪县| 绥中县| 雅江县| 南雄市| 循化| 喜德县| 富裕县| 天长市| 黄龙县| 富蕴县| 宁南县| 济宁市| 同江市| 中西区| 吴堡县| 铜梁县| 金沙县| 东乡| 富裕县| 蒙自县| 墨竹工卡县| 讷河市| 团风县| 郧西县| 西林县| 天台县| 垫江县| 怀安县| 醴陵市| 务川| 石泉县| 芮城县| 昭平县| 大厂| 金阳县| 昌吉市|