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>

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

  1. Liferay portlet首选项(preferences)设置、存储处理

    最近使用Liferay做项目集成,由于团队人员在之前对Liferay这东西都没有充分的了解,用起来着实费了不少力气,最近为了为定制好的portlet添加初始化信息,翻阅了一些文章,下面是了解到的关于初 ...

  2. 应用程序首选项(application preference)及数据存储

    应用程序首选项(application preference)用来存储用户设置,考虑以下案例: a. 假设有一款MP3播放器程序,当用户调节了音量,当下次运行该程序时,可能希望保持上一次调节的音量值. ...

  3. Electron存储简单数据和用户首选项推荐用electron-store

    electron-store1可以用来保存Electron应用程序或模块的简单数据持久性-保存和加载用户首选项,应用程序状态,缓存等. 1https://github.com/sindresorhus ...

  4. 获取AD域中SYSVOL和组策略首选项中的密码

    这种方法是最简单的,因为不需要特殊的“黑客”工具.所有的攻击必须做的是打开Windows资源管理器,并搜索域名为SYSVOL DFS共享的XML文件.在大多数情况下,以下XML文件将包含凭据:grou ...

  5. 详解Android首选项框架ListPreference

    详解Android首选项框架ListPreference 原文地址 探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写 ...

  6. Android - Shared Preference (分享首选项) 具体解释

    Shared Preference (分享首选项) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24454963 Sh ...

  7. Android学习笔记(十四)方便实用的首选项-PreferenceActivity

    突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家.其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceAct ...

  8. android 39 共享首选项

    共享首选项SharedPreferences:用于存储少量数据,大量数据则存入文件或者sd卡.以键值对保存数据. activity.java package com.sxt.day06_05; imp ...

  9. Windows 8 动手实验系列教程 实验6:设置和首选项

    动手实验 实验6:设置和首选项 2012年9月 简介 实验3介绍了合约并演示了应用程序如何轻松地与共享和搜索合约实现集成.合约同样包含设置超级按钮,它对活动的Windows应用商店应用的设置进行修改. ...

随机推荐

  1. less学习:基础语法总结

    一. less是什么 Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 注意1):less使用. ...

  2. 如何安装chrome扩展?比如json-handle插件如何安装

    chrome插件安装方法: 方式一,在线安装 直接插到json-handle地址,添加即可 https://chrome.google.com/webstore/detail/json-handle/ ...

  3. Listview右侧 IndexBar

    qq 好友聊天界面,右侧 IndexBar  A B C D ,点击跳转到相应的联系人名字 import android.content.Context; import android.graphic ...

  4. idea中建立maven web项卡在Generating Project in Batch mode

    Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约5.1M的xml文件. Maven一般命令:mvn archetype ...

  5. codevs3027线段覆盖2(DP)题解

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  6. DUIlib使用Fastreport--自定义的数据

    报表根据数据源的可以分为拉模式和推模式,拉模式就是在报表中添加数据源组件从数据库中拉取数据,我们上篇报表的简单使用就是拉模式.而推模式就是在程序中构造数据托给报表显示.这篇我们这要说的是推模式. 在程 ...

  7. NGINX----源码阅读----init配置脚本

    /auto/init init脚本负责初始化各种目录环境变量值. 1.make文件.源文件.头文件.配置头文件路径变量初始化. NGX_MAKEFILE=$NGX_OBJS/Makefile NGX_ ...

  8. 8.MyBatos的动态Sql

    1.创建javaWeb项目MyBatis_dynamicSQL并在WebRoot下的WEB-INF下的lib下添加如下jar文件 cglib-nodep-2.1_3.jar log4j-1.2.17. ...

  9. Ansible 变量

    1. 变量来源 inventoryfile中定义 playbook中定义 include文件和角色中定义变量 系统facts  ansible hostname -m setup local fact ...

  10. WPF 限制Textbox输入的内容

    限制文本框TextBox的输入内容,在很多场景都有应用.举个例子,现在文本框中,只能输入0.1.2.3.4.5.6.7.8.9.“|”这11个字符. 限制输入0-9很容易实现,关键是这个“|”符号.它 ...