Java如何存储偏好设置(配置信息)

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

  • 使用SQLitederby等数据库
  • 使用文件存储,放置在user.dir或者user.home

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

Preferences 本身就是偏好的意思,平台无关的一种方案,windows系统中将配置存入注册表,类unix系统中存入文件系统;
Preferences节点上可以存储具体的配置值,也可以存储另一个Preferences,达到树形存储的目的

部分API介绍

  • 获取根节点

    //返回用户的根首选项节点
    Preferences preferences = Preferences.userRoot();
    //返回系统的根首选项节点
    Preferences preferences = Preferences.systemRoot();
    
  • 获取子节点

    //返回与此节点位于同一树中的命名首选项节点
    Preferences node=preferences.node("path");
    
    //一般会有一个应用程序的根节点与`package`的命名类似,例如;
    Preferences node=preferences.node("/com/podigua");
    
  • 获取值

    获取值时,必须有默认值(用户未配置时,则会返回默认值)

    //返回各种类型的值
    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);
    
  • 设置值

    //设置各种类型的值
    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);
    
  • 强制更改(强制保存配置)

    //强制更改此首选项节点及其持久存储的后代
    preferences.flush();
    
  • 配置的删除

    //移除配置键为key的配置
    preferences.remove("key");
    //移除当前节点
    preferences.removeNode();
    
  • 配置的导入导出(本质为一个xml文件)

    //静态方法导入一个配置
    File file=new File("/option.xml");
    Preferences.importPreferences(new FileInputStream(file));
    //导出当前节点(不含子节点)
    preferences.exportNode(new FileOutputStream(file));
    //导出当前节点以及子节点
    preferences.exportSubtree(new FileOutputStream(file));
    
  • 配置的实时生效

    ​ 可以使用bind或者ChangeListener

    private SimpleStringProperty textProperty=new SimpleStringProperty();
    public void start(Stage primaryStage) throws Exception{
      //...
      Button button=new Button();
      // textProperty的值发生改变时,会调整button的text
      button.textProperty().bind(textProperty);
      //...
    }
    
    

你可能感兴趣的:(Java如何存储偏好设置(配置信息))