Предпочтения в Java


Я бы хранил свой объект внутри .jar, используя java preferences.

Я преобразую свой объект в строку и сохраняю его.

Я использую этот код, чтобы сохранить его:

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 4

2 ответа:

Вам нужно будет разбить строку на длину предпочтения.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);
   }

Существует также ограничение на размер ключа, который является предпочтительным.MAX_KEY_LENGTH.

Еще один момент заключается в том, что вы можете использовать метод Preference keys для воссоздания вашего объекта.

Вы можете разрезать свою строку на части, так как исключение говорит, что ваша строка слишком длинная

Пример того, как разбить строку на определенное количество символов, можно найти в 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