最近研究JavaFx
,有一些配置信息不知如何存储,自己想到的方案如下
- 使用
SQLite
、derby
等数据库 - 使用文件存储,放置在
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); //... }