我们从Properties文件中读取文件,其中文件可能在指定的目录中如D:/PROGRAM BACK/DEVELOPMENT TOOLS/Program Files/eclipseEE3.4.1/workspace/WebTest1.0/src/com/shopping/eus/property/sys.properties:,也可能是在我们定义的某一个包中如:com.shopping.eus.property.sys注意包名为:com.shopping.eus.property下面有个sys.properties文件;
总体来说要理解的是:Properties是Hashtable的一个子类,所以他不但有自己的方法可用也可使用Hashtable的方法,如
本身的setProperty(String key,String value)与Hashtable的put(Object key,Object value)都可用。又如getProperty与get方法。
另外:要从Properties文件中读出某一个值,必须先加载或将整个文件中的键和值都读入Properties对象中或者直接说是Hashtable中。所以从文件中读取可以采用load方法,而对于我们更方便的一种方式是从我们开发的某一个包中读取则可用到PropertyResourceBundle方法的getBundle,并读出所有键和值再set进去便可了。具体看一下源代码吧。两个方式都有:
外部接口类:
- package com.shopping.eus.util;
- import java.util.Properties;
- public class SysProp {
- private static Properties sysProperty = null ;
- public static String getProperty(String key){
- return getProperty(key,"");
- }
- public static String getProperty(String key,String defaultValue){
- if(sysProperty == null){
- sysProperty = PropertyUtil.getPropObjFromBundle("com.shopping.eus.property.sys");
- }
- if(sysProperty == null){
- sysProperty = PropertyUtil.getPropObjFromFile("D:/PROGRAM BACK/DEVELOPMENT TOOLS/Program Files/eclipseEE3.4.1/workspace/WebTest1.0/src/com/shopping/eus/property/sys.properties");
- }
- return sysProperty.getProperty(key, defaultValue);
- }
- public static void main(String [] args){
- SysProp.getProperty("userName");
- System.out.println(SysProp.getProperty("userName"));
- }
- }
具体加载类:
- package com.shopping.eus.util;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Enumeration;
- import java.util.Properties;
- import java.util.PropertyResourceBundle;
- public class PropertyUtil {
- public static Properties getPropObjFromBundle(String bundleName) {
- Properties objProp = new Properties();
- PropertyResourceBundle bundle = (PropertyResourceBundle)PropertyResourceBundle.getBundle(bundleName);
- Enumeration enm = bundle.getKeys();
- while(enm.hasMoreElements()){
- String key = (String)enm.nextElement();
- String value = bundle.getString(key);
- objProp.setProperty(key, value);
- }
- return objProp;
- }
- public static Properties getPropObjFromFile(String filePath) {
- Properties objProp = new Properties();
- File file = new File(filePath);
- InputStream inStream;
- try {
- inStream = new FileInputStream(file);
- objProp.load(inStream);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return objProp;
- }
- }
基本上这两种方法可以满足我们从Properties读取了,理解起来也不难。当然具体使用时是要改进一下的。