使用java.util.prefs.Preferences代替java.util.Properties

典型的應用程序安裝程序需要向用戶詢問幾個選項,其中一些是配置問題,例如,應用程序應在其上運行的端口,應如何運行等。應用程序必須記住這些選項,并在每個選項中使用它們。跑。 解決此問題的標準方法是將這些選項寫入屬性文件,該文件可以在應用程序啟動時加載。 但是隨后問題又轉移到其他地方,即記住安裝路徑,然后從安裝路徑加載所需的屬性文件。

記住安裝路徑可以通過設置環境變量(例如,MYAPP_HOME)來解決。 變量可以在安裝時用所需的值初始化,以便每次加載應用程序時都將設置該變量。 這是大多數項目中采用的典型解決方案。

其他解決方案

JDK提供的Preferences API可用于解決此典型問題。 首選項就像屬性一樣工作,但與屬性不同,它們是持久的。 在背面,當寫入首選項時,它將被存儲到后備存儲中。 當您要求首選項時,將從該存儲中加載該值。 在典型的Windows計算機上,默認存儲為Windows注冊表,但該存儲是可配置的,您可以將其更改為所需的文件,例如文件。

寫首選項很簡單。 與基于字符串的鍵/值對的屬性不同,首選項具有字符串的鍵,但是您可以存儲所有基本類型的值,例如long , boolean , double等。

public class StaticPreferenceFactory {public static void main(String args[]) throws Exception {Preferences prefsRoot = Preferences.userRoot();Preferences myPrefs = prefsRoot.node("com.myapp.preference.staticPreferenceLoader");myPrefs.put("fruit", "apple");myPrefs.putDouble("price", 40);myPrefs.putBoolean("available", false);return prefsRoot;}
}

就像我們有系統變量和用戶變量一樣。 您可以通過調用systemRoot()獲得一個系統首選項節點,并且您可以通過調用userRoot()節點獲得一個用戶首選項節點。 一旦首選項存儲在userNode中,系統的其他用戶就無法訪問它,就像用戶變量一樣。 您可以清除通過調用clear() API編寫的首選項。

public class UsePreference {public static void main(String args[]) throws Exception {Preferences myfilePrefs = Preferences.userRoot();myfilePrefs = myfilePrefs.node("com.myapp.preference.staticPreferenceLoader");System.out.println("finding fruit:"+ myfilePrefs.get("fruit", "not found") + " available :"+ myfilePrefs.getBoolean("available", true));}
}

就像屬性一樣,檢索首選項也很簡單。 如果找不到該值,此處的get API會使用兩個參數:要找到的鍵和默認值。

Spring還提供了PreferencesPlaceholderConfigurer ,可用于加載首選項。

<bean id="preferencePlaceHolder"class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"><property name="userTreePath" value="com.myapp.preference.staticPreferenceLoader" />
</bean>
<bean id="myEntity" class="info.dependencyInjection.spring.factory.MyEntity"><property name="value" value="${fruit}" />
</bean>

對于我們的安裝程序問題,我們可以在安裝時將所有配置選項存儲在“首選項”中,應用程序將只關心讀取這些值。 這樣,我們可以避免編寫環境變量的所有麻煩,并確保每次都加載正確的變量。

參考:在我們的JCG合作伙伴 Rahul Sharma的“到目前為止之路”博客 中 , 使用java.util.prefs.Preferences代替java.util.Properties 。

相關文章 :
  • 做短,但做對!
  • 在Java 7中處理文件
  • Java泛型快速教程
  • Google Guava庫必需品
  • Java最佳實踐–多線程環境中的DateFormat

翻譯自: https://www.javacodegeeks.com/2011/09/use-javautilprefspreferences-instead-of.html

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

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

相關文章

STM32F1筆記(八)時鐘

STM32有五種時鐘源 1、HSI。高速內部時鐘&#xff0c;RC振蕩器&#xff0c;頻率為8MHz。 2、HSE。高速外部時鐘&#xff0c;可接石英/陶瓷諧振器&#xff0c;或者借外部時鐘源&#xff0c;頻率范圍為4MHz~16MHz。 3、PLL。鎖相環倍頻輸出&#xff0c;其時鐘輸入源可選擇為HS…

java常用工具類(一)

一、String工具類 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * String工具類. <br> * * author 宋立君 * date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NO…

Oracle定時器調用存儲過程

關于Oracle定時器調用存儲過程的一點總結&#xff0c;如果有不足的地方&#xff0c;希望大家多多指導&#xff0c;也是第一次在博客上寫東西&#xff0c;以前也只是自己總結之后放在硬盤了&#xff0c;后來同事告訴自己&#xff0c;其實寫博客可以獲得很多&#xff0c;不管是知…

python可以下載百度文庫_不用下載券也能下載百度文庫資料,Python幫你輕松搞定...

大家可能平時都有在百度文庫下載文檔的經歷&#xff0c;費盡心思好不容易在文庫找了一份可以用的資料&#xff0c;一看需要用下載券下載&#xff0c;搞的人很煩。 有的人為了節省時間&#xff0c;就任性辦理了個文庫VIP&#xff0c;再也不用糾結怎么下文檔了。如果你是一個百度…

將對象映射到多個XML模式–天氣示例

我已經在EclipseLink JAXB&#xff08;MOXy&#xff09;的XmlPath和外部綁定文件擴展中撰寫了以前的文章。 在本文中&#xff0c;我將通過將單個對象模型映射到兩個不同的XML模式來演示這些擴展的功能。 為了使示例更加“真實”&#xff0c;XML數據將來自提供天氣信息的兩種不同…

STM32F1筆記(九)通用定時器

STM32F1的定時器分為TIME1/8等高級定時器&#xff0c;TIME2~5等通用定時器&#xff0c;TIME6/7基本定時器。三者的區別主要參考《STM32中文參考手冊》里特性的每種定時器主要特性的異同。 先看中文手冊中通用定時器的簡介&#xff1a; 通用定時器的寄存器有一個比較有趣的地方…

佳能MP258的5200錯誤和P08代碼解決方法及清零方法

參考文章轉載于:https://www.cnblogs.com/arcer/p/5659624.html

tomcat通過conf-Catalina-localhost目錄發布項目詳解

轉自&#xff1a;http://www.cnblogs.com/iyangyuan/p/3316444.html&#xff0c;感謝 楊元。 Tomcat發布項目的方式大致有三種&#xff0c;但小菜認為通過在tomcat的conf/Catalina/localhost目錄下添加配置文件&#xff0c;來發布項目&#xff0c;是最佳選擇。 因為這樣對tomca…

c++保存圖標到dll_自動保存郵件附件至指定文件夾

最近有個需求&#xff0c;ERP系統會自動發很多csv附件到我郵箱&#xff0c;我需要把這些附件上傳到FTP服務器&#xff0c;服務器會把這些csv的數據寫到另外一個系統的數據庫。每次大概有30個郵件&#xff0c;每個郵件有一個附件&#xff0c;而且附件的名字都一樣&#xff0c;是…

有時在Java中,一個布局管理器是不夠的

在開發Java Swing應用程序時&#xff0c;最經常的是&#xff0c;我們需要在多個嵌套面板中使用多個布局管理器。 通常這不是問題&#xff0c;并且被認為是幾乎所有人類已知語言的所有UI開發的常規做法。 但是&#xff0c;大多數情況下&#xff0c;對于UI中的每個面板&#xff0…

VM克隆之后啟動eth0找不到eth0:unknown interface:no such device

問題出現&#xff1a;VMware 克隆之后&#xff0c;ifconfig命令執行找不到eth0,報錯 eth0:unknown interface:no such device 是因為/etc/sysconf/network-scripts/ifcfg-eth0配置復制過來和虛擬主機的網卡Mac等信息不匹配 解決方法&#xff1b; 刪除/etc/udev/rules.d/70-pers…

“精彩極了”和“糟糕透了”

雖然已經是25歲&#xff0c;但是對小學的一篇課文依然記憶尤新&#xff0c;《“精彩極了”和“糟糕透了”》。 課文正文 記得七八歲的時候&#xff0c;我寫了第一首詩。母親一念完那首詩&#xff0c;眼睛亮亮的&#xff0c;興奮地嚷著&#xff1a;“巴迪&#xff0c;真是你寫的…

python中print的用法_Python中print函數簡單使用總結

Python中print函數簡單使用總結 print函數是Python的入門&#xff0c;每一個學習python的人都繞不開這個函數&#xff0c;下面介紹一下這個函數的用法。 打開電腦&#xff0c;選擇python軟件&#xff0c;下面選擇python 3.7為例進行介紹&#xff0c;點擊python 3.7&#xff0c;…

STM32F1筆記(十)PWM

PWM&#xff1a;Pulse Width Modulation&#xff0c;脈沖寬度調制。是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單來說就是對脈沖寬度的控制。 在《STM32中文參考手冊》里可以看到 占空比&#xff1a;占空比是指在一個脈沖循環內&#xff0c;通電時…

從GlassFish 3.x擴展到WebLogic 12c Server

Oracle針對GlassFish服務器的策略的主要目標之一是“與Fusion Middleware and Products集成”&#xff08;來源&#xff1a; Community Roadmap&#xff0c;2010年5月 &#xff09;。 在今年早些時候&#xff0c;您聽到了很多關于兩臺服務器合而為一的恐懼和謠言。 看到這兩種產…

移動互聯網時代:如何讓女孩愛上你在一分鐘內?

部分《移動互聯網時代&#xff1a;讓女孩愛上你在一分鐘內》其實我只是做原來的盲目思想有移動互聯網的自主知識產權&#xff0c;他沒有詳細說明如何真正讓女孩愛上你在一分鐘內&#xff1f;在真實生活中&#xff0c;預期也沒有那么簡單&#xff0c;易于&#xff0c;畢竟&#…

hashset去重原理_基于simhash的文本去重原理

互聯網網頁存在著大量重復內容&#xff0c;必須有一套高效的去重算法&#xff0c;否則爬蟲將做非常多的無用功&#xff0c;工作時效性無法得到保證&#xff0c;更重要的是用戶體驗也不好。業界關于文本指紋去重的算法眾多&#xff0c;如 k-shingle 算法、google 提出的simhash …

解決express video 手機無法播放的問題

http://stackoverflow.com/questions/24976123/streaming-a-video-file-to-an-html5-video-player-with-node-js-so-that-the-video-c 項目地址 https://github.com/shenggen1987/mp4-demo express index.jade extends layoutblock contenth1 titlep Welcome to #{title}vid…

STM32F1筆記(十一)ADC

查看《STM32中文參考手冊》里ADC的介紹和特性 STM32的ADC最大轉換速率為1Mhz&#xff0c;即1us&#xff0c;在ADCCLK14M&#xff0c;采樣周期為1.5個ADC時鐘下得到。當ADC的時鐘超過14M時&#xff0c;將導致結果準確度下降。 規則通道相當于正常運行的程序。注入通道就相當于中…

使用JPA和Spring 3.1進行事務配置

1.概述 本教程將討論配置Spring Transactions &#xff0c;使用Transactional批注和常見陷阱的正確方法 。 要更深入地討論核心持久性配置&#xff0c;請查看Spring with JPA教程 。 有兩種不同的配置事務的方法– 批注和AOP –每種都有自己的優勢–我們將在這里討論更常見的…