- 用IDEA写程序时碰到了一个问题,读取写在常量类中的一个字符串时发生了错误
Error:(6, 8) java: 对于常量池来说, 字符串 "{"actualCapital":"",..." 的 UTF8 表示过长
网上查了一下,是这个字符串的大小超过了65535个字节,也就是64K。的确,我的这个字符串长度大概是94K,超过了64K。
2. 解决方法:把这个字符串从常量类中挪到properties文件中。
* 在resource下面新加一个json.properties文件,然后把大字符串写到这个文件中
json=[大字符串]
- 但是这又引出了另外一个问题:中文字符在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;
}