Java如何存儲(chǔ)偏好設(shè)置(配置信息)

最近研究JavaFx,有一些配置信息不知如何存儲(chǔ),自己想到的方案如下

  • 使用SQLitederby等數(shù)據(jù)庫
  • 使用文件存儲(chǔ),放置在user.dir或者user.home

以上均不是好方案java.util.prefs.Preferences提供了更好的方案

Preferences 本身就是偏好的意思,平臺(tái)無關(guān)的一種方案,windows系統(tǒng)中將配置存入注冊表,類unix系統(tǒng)中存入文件系統(tǒng);
Preferences節(jié)點(diǎn)上可以存儲(chǔ)具體的配置值,也可以存儲(chǔ)另一個(gè)Preferences,達(dá)到樹形存儲(chǔ)的目的

部分API介紹

  • 獲取根節(jié)點(diǎn)

    //返回用戶的根首選項(xiàng)節(jié)點(diǎn)
    Preferences preferences = Preferences.userRoot();
    //返回系統(tǒng)的根首選項(xiàng)節(jié)點(diǎn)
    Preferences preferences = Preferences.systemRoot();
    
  • 獲取子節(jié)點(diǎn)

    //返回與此節(jié)點(diǎn)位于同一樹中的命名首選項(xiàng)節(jié)點(diǎn)
    Preferences node=preferences.node("path");
    
    //一般會(huì)有一個(gè)應(yīng)用程序的根節(jié)點(diǎn)與`package`的命名類似,例如;
    Preferences node=preferences.node("/com/podigua");
    
  • 獲取值

    獲取值時(shí),必須有默認(rèn)值(用戶未配置時(shí),則會(huì)返回默認(rèn)值)

    //返回各種類型的值
    String str = preferences.get("str", "default string");
    boolean bool = preferences.getBoolean("bool", true);
    byte[] bytes = preferences.getByteArray("bytes", new byte[0]);
    double aDouble = preferences.getDouble("double", 1.0);
    float aFloat = preferences.getFloat("float", 0.1f);
    int anInt = preferences.getInt("int", 1);
    long aLong = preferences.getLong("long", 1L);
    
  • 設(shè)置值

    //設(shè)置各種類型的值
    preferences.put("str","string");
    preferences.putBoolean("bool",true);
    preferences.putByteArray("bytes",new byte[0]);
    preferences.putDouble("double",1D);
    preferences.putFloat("float",0.1f);
    preferences.putInt("int",1);
    preferences.putLong("long",1L);
    
  • 強(qiáng)制更改(強(qiáng)制保存配置)

    //強(qiáng)制更改此首選項(xiàng)節(jié)點(diǎn)及其持久存儲(chǔ)的后代
    preferences.flush();
    
  • 配置的刪除

    //移除配置鍵為key的配置
    preferences.remove("key");
    //移除當(dāng)前節(jié)點(diǎn)
    preferences.removeNode();
    
  • 配置的導(dǎo)入導(dǎo)出(本質(zhì)為一個(gè)xml文件)

    //靜態(tài)方法導(dǎo)入一個(gè)配置
    File file=new File("/option.xml");
    Preferences.importPreferences(new FileInputStream(file));
    //導(dǎo)出當(dāng)前節(jié)點(diǎn)(不含子節(jié)點(diǎn))
    preferences.exportNode(new FileOutputStream(file));
    //導(dǎo)出當(dāng)前節(jié)點(diǎn)以及子節(jié)點(diǎn)
    preferences.exportSubtree(new FileOutputStream(file));
    
  • 配置的實(shí)時(shí)生效

    ? 可以使用bind或者ChangeListener

    private SimpleStringProperty textProperty=new SimpleStringProperty();
    public void start(Stage primaryStage) throws Exception{
      //...
      Button button=new Button();
      // textProperty的值發(fā)生改變時(shí),會(huì)調(diào)整button的text
      button.textProperty().bind(textProperty);
      //...
    }
    
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容