解決“對於常量池來說, 字符串 "..." 的 UTF8 表示過長”以及讀取properties中文亂碼的問題

  1. 用IDEA寫程序時碰到了一個問題,讀取寫在常量類中的一個字符串時發生了錯誤
Error:(6, 8) java: 對於常量池來說, 字符串 "{"actualCapital":"",..." 的 UTF8 表示過長

網上查了一下,是這個字符串的大小超過了65535個字節,也就是64K。的確,我的這個字符串長度大概是94K,超過了64K。
2. 解決方法:把這個字符串從常量類中挪到properties文件中。
* 在resource下面新加一個json.properties文件,然後把大字符串寫到這個文件中

json=[大字符串]
  1. 但是這又引出了另外一個問題:中文字符在properties文件中讀取出來後變成了亂碼,網上找了很多方法,設置編碼解碼格式等,也沒有解決。後來終於找到了解決方法,就是把字符串粘貼進properties文件中前,先進行ASCII–>NATIVE轉碼,轉碼完成後寫進去,再從裏面讀出來,中文就正常了。轉碼有很多工具,這裏貼一個網站:
http://tool.chinaz.com/tools/native_ascii.aspx

勾選“不轉換字母和數字”,點擊ASCII轉NATIVE按鈕即可
4. 同時附上一個簡單的從properties中讀取數據的方法

/**
 * 從指定的配置文件裏面根據指定的key讀取value
 * @param propertiesPath 配置文件地址
 * @param key            key值
 * @param defaultValue   如果該key沒有找到,則返回的默認值
 * @return value值
 */
public static String readFromProperties(String propertiesPath, String key, String defaultValue) {

    try {
        Properties properties = new Properties();
        InputStream in = GraphresysServiceImpl.class.getResourceAsStream(propertiesPath);
        properties.load(in);
        in.close();
        if (properties.containsKey(key)) {
            return properties.getProperty(key);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return defaultValue;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章