猛禽洛的程式筆記庫

[JavaFx] 參數儲存 Preferences 的使用方式

在JAVAFX中,我們可以使用 Preferences 來儲存程式會使用到的設定值。

這些設定值會儲存在登錄檔中:

HKEY_CURRENT_USER\Software\JavaSoft\Prefs

當我們要用的時候,就可以快速地讀取出來。

初始化 Preferences 物件:

//這邊使用一個全域變數物件,方便以下搭配封裝的程式碼使用
//Parameter.class為此class的名稱,用來當作儲存路徑使用
private static final Preferences pref = Preferences.userNodeForPackage(Parameter.class);

 

儲存一個值進去:

//儲存一個布林值
public static void saveMyBoolean(boolean open){
  try{
                //參數的名稱
    pref.putBoolean("TAG", open);
                //確認儲存
    pref.flush();
  } catch (BackingStoreException e) {
    e.printStackTrace();
  }
}

 

取得一個值:

public static boolean getMyBoolean(){
        //用TAG抓取剛剛儲存的布林值,後面參數為沒有此TAG時要回傳的預設值
  return pref.getBoolean("TAG", false);
}

 

如果今天想儲存比較複雜的,一個陣列的話:

public static void saveMyArray(float[][] myArray){
  try{
                //這邊將myArray的二維陣列轉換成JSONArray來儲存
    JSONArray jsonArray = new JSONArray(myArray);
                //JSONArray轉換成字串即可存進
    pref.put("TAG", jsonArray.toString());
    pref.flush();
  } catch (BackingStoreException e) {
    e.printStackTrace();
  }
}

 

取得上面儲存陣列的方式:

public static float[][] getMyArray(){
  //載入儲存的資料
  String myArray = pref.get("TAG", null);
        //有找到儲存的資料才做後續處理
  if(myArray != null){
    JSONArray jsonArray = new JSONArray(myArray);
                //開始重組成原本的二維陣列
    List<Object> listArray1 = jsonArray.toList();

    float[][] floatArray = new float[listArray1.size()][];

    for(int i=0; i<listArray1.size(); i++){
      //讀取第二層陣列
      JSONArray listArray2 = new JSONArray(listArray1.get(i).toString());
      floatArray[i] = new float[listArray2.length()];
      for(int j=0; j<listArray2.length(); j++){
        floatArray[i][j] = listArray2.optFloat(j);
      }
    }

    return floatArray;
  }else{//沒找到就給預設值
    return defaultMyArray;
  }
}

 

清除所有儲存的資料:

public static void clearAllSettings(){
  try {
    if (pref.keys ().length > 0) {
      pref.clear ();
    }
    pref.flush();
  } catch (BackingStoreException e) {
    e.printStackTrace();
  }
}

 

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *