【问题标题】:Preferences in JavaJava 中的首选项
【发布时间】:2015-02-17 22:30:43
【问题描述】:

我会使用java preferences 将我的对象存储在.jar 中。

我将我的对象转换为字符串并存储它。

我用这段代码来保存它:

Preferences.userNodeForPackage(Centrale.class).put("myValue", myString);

我用这段代码来阅读它:

String myString = "";
myString = prefs.get("myValue", myString);

我在保存大字符串时发现错误。错误是:

java.lang.IllegalArgumentException: Value too long
java.util.prefs.AbstractPreferences.put(AbstractPreferences.java:245)

我该如何解决?

【问题讨论】:

    标签: java exception jar preferences


    【解决方案1】:

    你可以把你的字符串分成几部分,因为例外是你的字符串太长了

    可以在Cut Java String at a number of character找到如何以特定字符数拆分字符串的示例

    if(str.length() > 50) //if the string length > 50
    strOut = str.substring(0,50) //return substring from first character to 8 character
    strOut2 = str.substring(51, str.length) //second part
    

    【讨论】:

      【解决方案2】:

      您需要将字符串分解为 Preference.MAX_VALUE_LENGTH 的长度。我建议您创建与 myValue 相关的 myValue.1、myValue.2 等。加载后,您只需将值串在一起。

      这里有一些代码:

          String value = "....";
          int size = value.length();
          if (size > Preference.MAX_VALUE_LENGTH) {
            cnt = 1;
            for(int idx = 0 ; idx < size ; cnt++) {
               if ((size - idx) > Preference.MAX_VALUE_LENGTH) {
                 pref.put(key + "." + cnt, value.substring(idx,idx+Preference.MAX_VALUE_LENGTH);
                 idx += Preference.MAX_VALUE_LENGTH;
               } else {
                 pref.put(key + "." + cnt, value.substring(idx);
                 idx = size;
               }
            }
         } else {
            pref.put(key, value);
         }
      

      密钥大小也有一个限制,即 Preference.MAX_KEY_LENGTH。

      还有一点需要说明的是,您可以使用 Preference 键方法重新创建您的对象。

      【讨论】:

      • 这有助于我在偏好值中存储一个冗长的 JSON 字符串。
      • 如何检索这个值并收集为相同的旧字符串?
      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 2013-02-06
      相关资源
      最近更新 更多