java.util.prefs.Preferences

我們經常需要將我們的程序中的設定,如窗口位置,開啟過的文件,用戶的選項設定等數據記錄下來,以做便用戶下一次開啟程序能繼續使用這些數據。

以前我們通常的做法是使用Properties類,它提供以下方法:
void load(InputStream inStream)
void store(OutputStream out, String header)
String getProperty(String key, String defaultValue)
String getProperty(String key)
這些方法讓我們很容易的存取設定數據.

另外的辦法是使用ResourceBundle這個類來儲存設定數據,甚至有些程序作者使用一個自定結構的文件來儲存設定數據。
但不管怎樣,最讓程序作者頭痛的是:我該將這些數據保存在哪?

現在好了,JDK1.4為我們提供的java.util.prefs包,里面有一個Preferences類,能讓以上的工作變得極其輕松!
寫VB程序的人常常用SaveSetting函數和getSettging來存取注冊表中的用戶設定數據。而Java的Preferences類也提供了類似的機制。
Preferences類在不同的平臺中有不同的實現方式。而在Windows平臺中,Preferences是將數據保存在注冊表中的,而在其它平臺中的實現我就不得而知了(我對Linux等系統都不太了解).
但不管怎樣,都是通過相同的接口來使用的,程序作者可以不管實現細節。

建立Preferences對象
為了區分不同的應用程序的參數項,在建立Preferences時要指定一個節點路徑。
Preferences是一個抽象類,提供了一系列靜態方法和抽象方法來操作參數項:
抽象方法:
Preferences userData = Preferences.userNodeForPackage(this);
Preferences sysData = Preferences.systemNodeForPackage(this);
這兩個方法是從指定的物件所在的包(package)返回一個節點路徑,如this是javax.swing.JComponent,則返回/javax/swing
靜態方法:
Preferences userData = Preferences.userRoot().node("/com/sunway/spc");
Preferences sysData = Preferences.systemRoot().node("/com/sunway/spc");

以上每種方式提供了兩套操作方法。其中一套是用戶參數項,另一套是系統參數項。
在Windows平臺中,用戶參數項在注冊表中的根節點是
HKEY_CURRENT_USER/Software/JavaSoft/Prefs
系統參數項在注冊表中的根節點是
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs
而我們指定的節點路徑是位于這些根節點之下的.

如何讀寫數據
Preferences提供了多種類型數據的讀寫方法。
先來看寫(put)的方法,
put(String key, String value)
putBoolean(String key, boolean value)
putByteArray(String key, byte value[])
putDouble(String key, double value)
putFloat(String key, float value)
putInt(String key, int value)
putLong(String key, long value)
下面的是讀(get)的方法,
get(String key, String default)
getBoolean(String key, boolean default)
getByteArray(String key, byte default[])
getDouble(String key, double default)
getFloat(String key, float default)
getInt(String key, int default)
getLong(String key, long default)
注意,每一種get方法的第二個參數需要我們為它指定缺省的參數。
除了以上方式之外,Preferences還允許我們將它的數據導出到一個XML文件保存,
void exportNode(OutputStream os)
void exportSubtree(OutputStream os)
我們可以導出一個節點,或是導出整個子節點樹.

Preferences的一個演示
以上的講解足可以寫一個示例來看看Preferences是如何為我們工作的,看看下面的例子:

import java.io.FileOutputStream;
import java.util.prefs.BackingStoreException;
import java.util.prefs.PreferenceChangeEvent;
import java.util.prefs.PreferenceChangeListener;
import java.util.prefs.Preferences;public class PrefsDemo {public static void main(String args[]) {String keys[] = { "sunway", "copyright", "author" };String values[] = { "sunway technology company", "copyright 2002","turbochen@163.com" };/* 建立一個位于user root下的/com/sunway/spc節點參數項 */Preferences prefsdemo = Preferences.userRoot().node("/com/sunway/spc");// 為這個Preferences對象添加監聽,監聽首選項的改變prefsdemo.addPreferenceChangeListener(new PreferenceChangeListener() {@Overridepublic void preferenceChange(PreferenceChangeEvent evt) {System.out.println(evt.getKey()+" = "+evt.getNewValue());}});/* 儲存參數項 */for (int i = 0; i < keys.length; i++) {prefsdemo.put(keys[i], values[i]);}/* 導出到XML文件 */try {FileOutputStream fos = new FileOutputStream("prefsdemo.xml");prefsdemo.exportNode(fos);} catch (Exception e) {System.err.println("Cannot export nodes: " + e);}/* 去掉注釋可以清除注冊表中的參數項 *//*try {prefsdemo.removeNode();} catch (BackingStoreException e) {}*/}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249566.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django的母板系統

一.母板渲染語法 1.變量 {{ 變量 }} 2.邏輯 {% 邏輯語 %} 二.變量 在母板中有變量時,母板引擎會去反向解析找到這個傳來的變量,然后替換掉. .(點),在母板中是深度查詢據點符,它的查詢順序: 字典 > 屬性或方法 > 數字索引 三.過濾器 1.語法 {{ value|filter_name:參數}} 2…

python學習總結----時間模塊 and 虛擬環境(了解)

python學習總結----時間模塊 and 虛擬環境&#xff08;了解&#xff09; time- sleep&#xff1a;休眠指定的秒數(可以是小數) - time&#xff1a;獲取時間戳# 獲取時間戳(從1970-01-01 00:00:00到此刻的秒數)t time.time()print(t) - localtime&#xff1a;將時間戳轉換為對象…

【CSS】flex的常用布局

1、垂直居中&#xff0c;寫在父級上div{display: flex;justify-content: center;align-items: center; } 2、flex-左右兩端&#xff0c;垂直居中該布局在移動端較為常見<style> .wrap{display: flex;justify-content: space-between;align-items: center;width: 200px;he…

java.util.Properties

ava.util.Properties是對properties這類配置文件的映射。支持key-value類型和xml類型兩種 首先&#xff0c;新建一個文件&#xff0c;如圖&#xff1a; 然后再Java代碼段輸入如下代碼&#xff1a; import java.io.FileInputStream; import java.io.InputStream; import java…

Xpath使用方法

Xpath使用方法 注&#xff1a;默認死格式 先寫 //* 代表定位頁面下所有元素 1、Xpath支持ID、Class、Name定位功能 通過ID定位 //*[idkw]通過Class定位//*[classclass_name]通過Name定位//*[namename]-----------------------------------------------------------------------…

為什么這么多爛代碼?

在國內&#xff0c;有經驗的程序員都當領導了&#xff0c;領導又不寫代碼&#xff0c;那代碼只能讓剛入行的新手寫了&#xff0c;然后就是隨意堆砌&#xff0c;完成功能就行&#xff0c;所以目前我盡量不寫爛代碼&#xff0c;并盡量堅持改造已有的爛代碼&#xff0c;在我眼中&a…

Spring-boot 打成jar包后使用外部配置文件

官網說明 第一種是在jar包的同一目錄下建一個config文件夾&#xff0c;然后把配置文件放到這個文件夾下&#xff1b; 第二種是直接把配置文件放到jar包的同級目錄&#xff1b; 第三種在classpath下建一個config文件夾&#xff0c;然后把配置文件放進去&#xff1b; 第四種是在c…

acm模板生成

為迎接&#xff0c;接下來的區域賽&#xff0c;要做好準備(雖然不是特別有信心&#xff0c;但是還是要鼓勵自己&#xff0c;可以取得收獲的&#xff0c;加油) acm_latex模板&#xff1a; https://www.cnblogs.com/palayutm/p/6444833.html#e69bb4e696b0_1 windows下安裝texlive…

UI自動化之元素定位(xpath、css)

很早之前就已經寫過自動化了&#xff0c;不過點著功能久了就會容易忘記元素定位&#xff0c;尤其是xpath和css定位&#xff0c;所以就花點時間做下總結收集。 xpath有兩種定位&#xff1a; 一.絕對路徑&#xff08;不推薦使用&#xff0c;除非已經使用了所有方式仍然無法定位&a…

屬性編輯器PropertyEditor

在Spring配置文件里&#xff0c;我們往往通過字面值為Bean各種類型的屬性提供設置值&#xff1a;不管是double類型還是int類型&#xff0c;在配置文件中都對應字符串類型的字面值。BeanWrapper填充Bean屬性時如何將這個字面值轉換為對應的double或int等內部類型呢&#xff1f;我…

郵箱驗證

public class Emailstandard { /* * 以數字或字母開頭 * 之前可以含有數字,字母,下劃線,點 * 有且只有一個 * 之后只能含有數字,字母 * 必須以.com或者.cn結尾 * */ public static void main(String[] args) { Scanner sca new Scanner(…

python第二十八課——編碼小常識

2.內存和硬盤&#xff1a;內存&#xff1a;計算機硬件組成部分之一&#xff0c;它是一個容器&#xff0c;用來存儲數據&#xff1b;處理數據速度快&#xff0c;存儲數據量小&#xff1b;斷電死機數據會丟失&#xff0c;短暫性存儲數據硬盤&#xff1a;計算機硬件組成部分之一&a…

Javadoc 使用詳解

很多程序對Javadoc都不重視&#xff0c;認識不到Javadoc的作用&#xff0c;很多人都是這樣認為的&#xff1a;“我只要寫好功能就夠了&#xff0c;寫Javadoc太浪費時間&#xff0c;也沒啥作用&#xff0c;還不如用寫Javadoc的時間再多些個功能呢&#xff01;”&#xff0c;我們…

Linux下查看當前文件大小的命令

1、ls -lht 列出每個文件的大小和當前目錄所有文件大小總和 2、du -sh * 列出當前文件夾下的所有子文件的大小 看你需要啥樣的&#xff0c;自己來吧 轉載于:https://www.cnblogs.com/xbxxf/p/9619818.html

(13)UniquePathIII

一、問題描述 給定一個二維數組。 數組只有一個元素是1&#xff0c;是起點數組只有一個元素是2&#xff0c;是終點數組中的0是必須經過的地方數組中的-1是障礙不可通過從起始點到終點一共有多少路徑&#xff1f; 二、思路 DFS 三、Code 1 package algorithm;2 3 /**4 * Create…

Spring IOC-BeanFactory的繼承體系結構

本文主要介紹BeanFactory以及它的各種繼承層級的接口、抽象類及實現類&#xff0c;因為內容很多&#xff0c;所以這里不介紹ApplicationContext繼承體系下的類&#xff08;雖然ApplicationContext本質上也是BeanFactory&#xff0c;但是畢竟這這是我們平時接觸最多的兩種類別&a…

deepin15.7掛載/home到單獨的分區:

1、首先打開Gpart分區編輯器&#xff0c;找一個空閑的分區&#xff0c;調整好分區大小&#xff0c;格式化成ext4格式。 具體步驟為首先unmount所用到的盤&#xff0c;然后右擊該盤選擇format to ext4&#xff0c;最后點擊apply提交修改 2、記錄下分區的路徑&#xff0c;比如 /d…

Java使用Redis實現分布式鎖來防止重復提交問題

如何用消息系統避免分布式事務&#xff1f; - 少年阿賓 - BlogJavahttp://www.blogjava.net/stevenjohn/archive/2018/01/04/433004.html 【請求去重】java基于分布式鎖解決重復請求問題 - qq_41793222的博客 - CSDN博客https://blog.csdn.net/qq_41793222/article/details/830…

【PHP】xampp配置多個監聽端口和不同的網站目錄(轉)

轉自&#xff1a;https://blog.csdn.net/cc1314_/article/details/75646344 windows下使用xampp配置多個監聽端口和不同的網站目錄 一&#xff1a;配置Apache文件httpd.conf打開Apache的配置文件httpd.conf&#xff0c;可以通過點擊xampp的Apache的config下的Apache(httpd.conf…

本地連接虛擬機 Oracle數據庫 報ORA-12541:TNS:no listener

一、環境 本機環境&#xff1a;win10,pl/sql Developer 虛擬機環境&#xff1a;win10&#xff0c;oracle 11g 1.本機和虛擬機互相ping都可以ping通。 2.虛擬機監聽程序已啟動。 二、配置文件 1.本機 tnsname.ora 配置文件 local (DESCRIPTION   (ADDRESS_LIST   (ADDR…