J2SE API读取Properties文件的六种方法

来源:岁月联盟 编辑:zhuzhu 时间:2007-07-10

使用J2SE API读取Properties文件的六种方法:

1.使用java.util.Properties类的load()方法

示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));

Properties p = new Properties();

p.load(in);

2.使用java.util.ResourceBundle类的getBundle()方法

示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

3.使用java.util.PropertyResourceBundle类的构造函数

示例: InputStream in = new BufferedInputStream(new FileInputStream(name));

ResourceBundle rb = new PropertyResourceBundle(in);

4.使用class变量的getResourceAsStream()方法

示例: InputStream in = JProperties.class.getResourceAsStream(name);

Properties p = new Properties();

p.load(in);

5.使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法

示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);

Properties p = new Properties();

p.load(in);

6.使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法

示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);

Properties p = new Properties();

p.load(in);

补充

Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法

示例:InputStream in = context.getResourceAsStream(path);

Properties p = new Properties();

p.load(in);

完整的示例:

JProperties.java文件

package com.kindani;//import javax.servlet.ServletContext;import java.util.*;import java.io.InputStream;import java.io.IOException;import java.io.BufferedInputStream;import java.io.FileInputStream;/** * 使用J2SE API?取Properties文件的六种方法 * User: SYNFORM * Date: 2005/07/12 * Time: 18:40:55 * To change this template use File | Settings | File Templates. */public class JProperties {    public final static int BY_PROPERTIES = 1;    public final static int BY_RESOURCEBUNDLE = 2;    public final static int BY_PROPERTYRESOURCEBUNDLE = 3;    public final static int BY_CLASS = 4;    public final static int BY_CLASSLOADER = 5;    public final static int BY_SYSTEM_CLASSLOADER = 6;    public final static Properties loadProperties(final String name, final int type) throws IOException {        Properties p = new Properties();        InputStream in = null;        if (type == BY_PROPERTIES) {            in = new BufferedInputStream(new FileInputStream(name));            assert (in != null);            p.load(in);        } else if (type == BY_RESOURCEBUNDLE) {            ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());            assert (rb != null);            p = new ResourceBundleAdapter(rb);        } else if (type == BY_PROPERTYRESOURCEBUNDLE) {            in = new BufferedInputStream(new FileInputStream(name));            assert (in != null);            ResourceBundle rb = new PropertyResourceBundle(in);            p = new ResourceBundleAdapter(rb);        } else if (type == BY_CLASS) {            assert (JProperties.class.equals(new JProperties().getClass()));            in = JProperties.class.getResourceAsStream(name);            assert (in != null);            p.load(in);            //return new JProperties().getClass().getResourceAsStream(name);        } else if (type == BY_CLASSLOADER) {            assert (JProperties.class.getClassLoader().equals(new JProperties().getClass().getClassLoader()));            in = JProperties.class.getClassLoader().getResourceAsStream(name);            assert (in != null);            p.load(in);            //return new JProperties().getClass().getClassLoader().getResourceAsStream(name);        } else if (type == BY_SYSTEM_CLASSLOADER) {            in = ClassLoader.getSystemResourceAsStream(name);            assert (in != null);            p.load(in);        }        if (in != null) {            in.close();        }        return p;    }    // ---------------------------------------------- servlet used/*    public static Properties loadProperties(ServletContext context, String path) throws IOException {        assert (context != null);        InputStream in = context.getResourceAsStream(path);        assert (in != null);        Properties p = new Properties();        p.load(in);        in.close();        return p;    }*/    // ---------------------------------------------- support class    /**     * ResourceBundle Adapter class.     */    public static class ResourceBundleAdapter extends Properties {        public ResourceBundleAdapter(ResourceBundle rb) {            assert (rb instanceof java.util.PropertyResourceBundle);            this.rb = rb;            java.util.Enumeration e = rb.getKeys();            while (e.hasMoreElements()) {                Object o = e.nextElement();                this.put(o, rb.getObject((String) o));            }        }        private ResourceBundle rb = null;        public ResourceBundle getBundle(String baseName) {            return ResourceBundle.getBundle(baseName);        }        public ResourceBundle getBundle(String baseName, Locale locale) {            return ResourceBundle.getBundle(baseName, locale);        }        public ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader) {            return ResourceBundle.getBundle(baseName, locale, loader);        }        public Enumeration<String> getKeys() {            return rb.getKeys();        }        public Locale getLocale() {            return rb.getLocale();        }        public Object getObject(String key) {            return rb.getObject(key);        }        public String getString(String key) {            return rb.getString(key);        }        public String[] getStringArray(String key) {            return rb.getStringArray(key);        }        protected Object handleGetObject(String key) {            return ((PropertyResourceBundle) rb).handleGetObject(key);        }    }}

JPropertiesTest.java文件

package com.kindani.test;import junit.framework.*;import com.kindani.JProperties;//import javax.servlet.ServletContext;import java.util.Properties;public class JPropertiesTest extends TestCase {    JProperties jProperties;    String key = "helloworld.title";    String value = "Hello World!";    public void testLoadProperties() throws Exception {        String name = null;        Properties p = new Properties();        name = "C://IDEAP//Properties4Methods//src//com//kindani//test//LocalStrings.properties";        p = JProperties.loadProperties(name, JProperties.BY_PROPERTIES);        assertEquals(value, p.getProperty(key));        name = "com.kindani.test.LocalStrings";        p = JProperties.loadProperties(name,JProperties.BY_RESOURCEBUNDLE);        assertEquals(value, p.getProperty(key));        assertEquals(value,((JProperties.ResourceBundleAdapter)p).getString(key));        name = "C://IDEAP//Properties4Methods//src//com//kindani//test//LocalStrings.properties";        p = JProperties.loadProperties(name, JProperties.BY_PROPERTYRESOURCEBUNDLE);        assertEquals(value, p.getProperty(key));        assertEquals(value,((JProperties.ResourceBundleAdapter)p).getString(key));        name = "//com//kindani//test//LocalStrings.properties";        p = JProperties.loadProperties(name, JProperties.BY_SYSTEM_CLASSLOADER);        assertEquals(value, p.getProperty(key));        name = "//com//kindani//test//LocalStrings.properties";        p = JProperties.loadProperties(name, JProperties.BY_CLASSLOADER);        assertEquals(value, p.getProperty(key));        name = "test//LocalStrings.properties";        p = JProperties.loadProperties(name, JProperties.BY_CLASS);        assertEquals(value, p.getProperty(key));    }/*    public void testLoadProperties2() throws Exception {        ServletContext context = null;        String path = null;        Properties p = null;        path = "/WEB-INF/classes/LocalStrings.properties";        p = JProperties.loadProperties(context, path);        assertEquals(value, p.getProperty(key));    }*/}

properties文件与JPropertiesTest.java文件相同的目录下

LocalStrings.properties文件

# $Id: LocalStrings.properties,v 1.1 2000/08/17 00:57:52 horwat Exp $# Default localized resources for example servlets# This locale is en_UShelloworld.title=Hello World!requestinfo.title=Request Information Examplerequestinfo.label.method=Method:requestinfo.label.requesturi=Request URI:requestinfo.label.protocol=Protocol:requestinfo.label.pathinfo=Path Info:requestinfo.label.remoteaddr=Remote Address:requestheader.title=Request Header Examplerequestparams.title=Request Parameters Examplerequestparams.params-in-req=Parameters in this request:requestparams.no-params=No Parameters, Please enter somerequestparams.firstname=First Name:requestparams.lastname=Last Name:cookies.title=Cookies Examplecookies.cookies=Your browser is sending the following cookies:cookies.no-cookies=Your browser isn't sending any cookiescookies.make-cookie=Create a cookie to send to your browsercookies.name=Name:cookies.value=Value:cookies.set=You just sent the following cookie to your browser:sessions.title=Sessions Examplesessions.id=Session ID:sessions.created=Created:sessions.lastaccessed=Last Accessed:sessions.data=The following data is in your session:sessions.adddata=Add data to your sessionsessions.dataname=Name of Session Attribute:sessions.datavalue=Value of Session Attribute: