Java中的偏好设置

5

我希望将我的对象使用 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)

我该怎么解决这个问题呢?

2个回答

9

您需要将字符串分解为长度为Preference.MAX_VALUE_LENGTH的部分。我建议您创建myValue.1,myValue.2等与myValue相关的变量。在加载时,只需将这些值连接在一起即可。

以下是一些代码:

    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 keys方法来重新创建对象。


这帮助我将一个较长的JSON字符串存储在首选项值中。 - extremecoder85
如何检索此值并将其作为同一旧字符串收集? - Noor Hossain

1
你可以将字符串切成多个部分,因为异常提示了你的字符串过长。
一个将字符串按字符数分割的示例可以在Java字符串按字符数切割中找到。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接