JavaEE 配置文件 应用首选项存储

JavaEE 配置文件 应用首选项存储

@author ixenos

什么是首选项?



首选项Preferences 指配置信息

首选项存储就是指对配置信息的存储

 

有什么方式存储?



有两种,一种存于属性文件中(无结构),一种存于XML文档中(有树型结构)

第一种

直接将配置信息存储在孤立的属性文件中,使用属性映射(property map)的数据结构来存储属性的键值对信息,属性之间没有层次结构。Properties类实现了属性映射数据结构,继承于HashTable类。

在该属性文件中,配置信息都是文本信息,都是String

/*专门使用一个类来组织配置信息*/

写一个属性映射列表

Properties settings = new Properties(); //创建一个无默认值的空属性列表

settings.setProperty(“width”, “200”); //内部调用put,这里只是为了形参限制为String类型

settings.setProperty(“title”, “ixenos”);

将属性映射列表保存到文件中

FileOutputStream out = new FileOutputStream(“program.properties”); //相对路径

Settings.store(out, “Program Properties”); //第二个参数是对这个文件的注释

在文件中将显示:

#Program Properties

#Sun Sept 4 07:31:52 2016

width=200

title=ixenos

从文件中加载属性

FileInputStream in = new FileInputStream(“program.properties”);

Settings.load(in);

习惯上,Properties需要将程序配置存储在用户主目录的某个子目录下子目录名通常由一个圆点开始:如 .corejava

String userDir = System.getProperty(“user.home”); //获得用户主目录字符串表示

Properties类为应用程序指定默认值的两种方式

getProperty时指定

String title = settings.getProperty(“title”, “Default Title”); //当键值不存在时返回默认值

在构造器指定,传入一个二级属性映射

Properties defaultSettings = new Properties();

defaultSettings.setProperty(“width”, );

defaultSettings.setProperty();

defaultSettings.setProperty();

Properties settings = new Properties(defaultSettings); //为查询表提供默认值

Properties类缺点:

1.没有层次结构,没有标准的为配置文件命名的规则

2.配置文件不能放置在主目录中

3.要求键是唯一的

       树形结构可以解决(如Preferences导出的XML格式)

 

 

第二种存储配置信息的方式:

Preferences首选项API

Preferences类提供了一个与平台无关的中心知识库,其底层实现是native的

Preferences的中心知识库具有树状结构,这样每个节点的路径就与包名形式一致,因此建议配置节点路径与程序中的包名匹配,如/com/ixenos/myapp

中心知识库中的每一个节点都有一个独立的map,可以用来存放数字、String、byte[],但不适宜存放JDK序列化的对象(二进制流),因为API设计者认为序列化格式不适于长期存放数据,不过可以将序列化对象存放在字节数组中。

为了增加灵活性,系统中有多棵并行的树

每个程序使用者拥有一棵树,同时,系统中还存一棵树,称为系统树,用于存放全体用户的公共信息

获取特定节点的两种方式:

第一种基于节点所在位置

Preferences root = Preferences.userRoot(); //先获取用户或系统的根

//Preferences root = Preferences.systemRoot();

Preferences node = root.node(“/com/ixenos/myapp”); //节点由节点路径获得

第二种基于类所在位置

Preferences node = Preferences.userNodeForPackage(some.getClass()); //也可以直接填入Class对象;通常obj就是this引用

// Preferences node = Preferences.userSystemForPackage(some.getClass());

一旦获得节点,就可以使用一系列 xxx getXXX(String key, xxx default) 方法访问键值表,右边的形参是对应类型的默认值;对应的用put(String key, xxx value)方法填入数据

Preferences类使配置数据易于迁移

可以调用下列方法将子树或者一个节点的全部值显示输出

void exportSubtree(OutputStream out)

void exportNode(OutputStream out)

数据将以XML格式存储,很关键

可以调用下列方法将他们导入到另一个中心知识库中

void importPreferences(InoutStream in)

例如:

 1 <?xml version=”1.0” encoding=”UTF-8”?>
 2 <!DOCTYPE perferences SYSTEM “http://java.sun.com/dtd/preferences.dtd”>
 3 <preferences EXTERNAL_XML_VERSION=”1.0”>
 4     <root type=”user”>
 5         <map/>
 6         <node name=”com”>
 7             <map/>
 8             <node name=”ixenos”>
 9                 <map/>
10                 <node name=”corejava”>
11                     <map>
12                         <entry key=”left” value=”11”>
13                         <entry key=”top” value=”9”>
14                         <entry key=”width” value=”22”>
15                         <entry key=”height” value=”52”>
16                         <entry key=”title” value=”Halo”>
17                     </map>
18                 </node>
19             </node>
20        </node>
21    </root>
22 </preferences>
时间: 2024-10-10 10:48:42

JavaEE 配置文件 应用首选项存储的相关文章

Mac OS平台的Premiere Pro怎样配置首选项设置(一)?

Premiere Pro CC 2018 Mac版是一款编辑画面质量比较好的软件,有较好的兼容性,且可以与adobe公司推出的其他软件相互协作!小编今天就此款软件的"首选项配置"问题,为大家详细讲解一下.了解如何针对几个方面(从外观到播放.音频以及更多)配置首选项设置,充分利用 Premiere Pro 的功能. 您可以自定义 Premiere Pro 的外观和行为,从确定过渡的默认长度到设置用户界面的亮度.其中大部分首选项一直有效,直至更改它们.但是,为暂存盘设置的首选项将随项目一起

iOS项目开发实战——使用用户首选项数据API存储信息

开发过Android的同学都知道,在Android中四大组件之一的Content Provider,这是一种轻量级的数据存储组件,可以存储一些简单地配置信息或者用户信息.比如最常用的地方就是记住用户名密码,使用户下次打开应用的时候可以不再输入,方便操作.来到iOS中,苹果也提供了类似功能的API--用户首选项数据,用于存储简单的用户配置信息.实用.方便.高效.具体实现步骤如下: (1)在Main.storyboard中拖入一个输入文本框TextView和保存按钮Button,等下要把文本框中的内

(23)Powershell中的首选项变量

上一节介绍了 Powershell 中的环境变量,本节介绍 Powershell 中的首选项变量,这些变量的作用与环境变量类似,都是Powershell中的内置变量,也可以对这些值进行更改.需要注意的是,首选项变量影响 PowerShell 操作环境以及在该环境中运行的所有命令.在很多情况下,cmdlet 带有的参数可用于替代特定命令的首选行为. 以下是 Powershell 中常见的首选项变量及其默认值. 首选项变量 默认值及说明 $ConfirmPreference  High $Debug

转:Android preference首选项框架

详解Android首选项框架ListPreference 探索首选项框架 在 深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用程序,它提供了一个搜索 飞机航班的工具.而且,假设该应用程序的默认设置是根据机票价格由低到高的顺序显示航班,但用户可以将首选项设置为始终根据最少停站数或特定航线来航班. 如何实现这一场景? ListPreference 显 然,必须为用户提供UI 来查看排序选项列表.该列表将包含每个选项的单选按钮,

IOS – 添加Settings Bundle应用程序首选项到Settings应用程序

iPhone允许应用程序将自定义首选项添加到Settings应用程序中,开发者也可以以编程的方式指定这些设置,但添加到Settings应用程序的方式会提供一个友好的GUI.自定义首选项支持多种多样的数据交互风格,包括文本.密码.开关.滑块.以及二级选择页面.但这里应注意避免敏感信息. IOS应用程序存储信息的方式主要有三种: 1. 单例类NSUserDefaults:NSUserDefaults类的工作原理类似于NSDictionary,所有首选项都以键/值对的方式存储在NSUserDefaul

Android开发 - 文件、保存状态和首选项

一个Activity至少应当在进入不活动状态前保存它的用户界面(UI)状态. Activity生命周期 创建并保存Shared Preference Shared Preference是一种简单的.轻量级的名称/值对(NVP)机制,用于保存原始应用程序数据. 使用SharedPreference类可以创建名称/值对的命名映射,它们可以在会话之间持久化,并在同一个应用程序沙箱中运行的应用程序组件之间共享(但是对其他应用程序不可用). 为了创建或者修改一个Shared Preference,可以调用

cocos2d-x之用户默认的首选项

在bool HelloWorld::init()中 1 // //写入用户的首选项数据,会在本地生成一个文件,即使应用程序被关闭掉, 2 // //再下次重开的时候还可以访问到这个数据.存储一个字符串类型的数据,(key, value) 3 // UserDefault::getInstance()->setStringForKey("data", "Hello bobo !!! "); 4 // 5 6 //获取刚刚存储的值,如果取不到data的值的话,会显

Android首选项SharedPreference-android学习之旅(六)

SharedPrefenence采用的键值对的方式来进行存储,采用内部存储的方式. 实例 public class MainActivity extends Activity { private SharedPreferences sp; private CheckBox cb = null; public static final String KEY_SHOW_DIALOG = "show_dialog"; @Override protected void onCreate(Bun

android 39 共享首选项

共享首选项SharedPreferences:用于存储少量数据,大量数据则存入文件或者sd卡.以键值对保存数据.