2014-12-19 113 views
4

我會使用java preferences將我的對象存儲在.jar中。Java中的偏好設置

我將我的對象轉換爲一個字符串,我存儲它。

我使用此代碼保存它:

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) 

我該如何解決它?

回答

5

被發現您需要將字符串分解爲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密鑰大小的限制。

還有一點需要指出的是,您可以使用首選項方法重新創建您的對象。

+0

太棒了!這是解決方案,謝謝! – user3253955 2014-12-19 16:58:39

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