使用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
使用java.util.prefs.Preferences代替java.util.Properties相关推荐
- java.util.prefs.Preferences
我们经常需要将我们的程序中的设定,如窗口位置,开启过的文件,用户的选项设定等数据记录下来,以做便用户下一次开启程序能继续使用这些数据. 以前我们通常的做法是使用Properties类,它提供以下方法: ...
- java.util.prefs.Preferences用法
我们经常需要将我们的程序中的设定,如窗口位置,开启过的文件,用户的选项设定等数据记录下来,以做便用户下一次开启程序能继续使用这些数据. 以前我们通常的做法是使用Properties类,它提供以下方法: ...
- win7 java注册表_使用JAVA和JNA在64位Win 7上读/写Windows注册表
我正在尝试使用JAVA在64位Win7上读/写 Windows注册表. 首先,我尝试了JDK java.util.prefs.Preferences and its reflection usage. ...
- Couldn‘t flush user prefs: java.util.prefs.BackingStoreException: Couldn‘t get file lock
最近在部署秒杀项目的时候,部署完以后,发现项目报错,如下: 文章目录 问题详情 解决方法 ulimit常用命令 问题详情 Waiting for possible Shutdown/StopTestN ...
- java.util.prefs.WindowsPreferences <init>异常警告
java.util.prefs.WindowsPreferences WARNING: Could not open/create prefs root node Software\JavaSoft\ ...
- Scala error: type mismatch; found : java.util.List[?0] required: java.util.List[B]
Scala error: type mismatch; found : java.util.List[?0] required: java.util.List[B] 目录 Scala error: t ...
- mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String 参考文章: (1)mybati ...
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager 一个比较老的web项目, IDEA 导入后不能用, ...
最新文章
- 转:delphi用URLDownloadToFile下载文件,用进度条跟踪下载进度
- c语言消字母游戏实验报告,C语言编程实验报告格式示例
- 安规电容能用什么代替_电容系列之安规电容
- javaslang_使用Javaslang的Java 8中的功能数据结构
- 欧拉定理(洛谷-P5091)(十进制快速幂实现)
- 模式识别中的特征提取及其内在意义
- 封装自己的LINUX光盘
- FastStone Capture无法录制系统声音解决方法(win10)
- 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程(转)
- win7+Ubuntu20.04双系统硬盘安装指南(含踩坑记录)
- 一位16年老员工的反思:什么才是真正的执行力?
- workerman创建wss服务
- go+gSoap+onvif学习总结:7、进行镜头调焦、聚焦和预置点的增删改查
- Java之throw和throws的区别
- iPhone最强悍对抗者——HTC崛起的秘密
- mqtt协议之Apache Apollo 安装和配置
- kotlin基础教程:<6>map集合
- NOI 2005 题解
- 第1年的放射学侵蚀进展是早期RA进一步侵蚀性进展的新预测指标
- xmind怎么导出甘特图_张兵导图:xmind如何绘制甘特图?
热门文章
- apigee 安装_APIGEE:用于API代理的CI / CD管道
- tomee_OpenLiberty:注入错误,适用于TomEE和Wildfly
- 朝着理想坚实迈进_坚实原则:接口隔离原则
- 混合多云架构_混合多云每个人都应避免的3个陷阱(第1部分)
- javaone_JavaOne和OOW 2015总结
- Java ArrayDeque
- java 8 集合分组_Java 8:按集合分组
- Java 8中的功能接口是什么? @功能注释和示例
- jax-ws cxf_走向REST:将Tomcat嵌入Spring和JAX-RS(Apache CXF)
- 如何在Java中实现线程池