`
djob2008
  • 浏览: 127434 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

转载自:http://www.java2000.net/p8572

使用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文件

/** 
** This program is free software. 
** 
** You may redistribute it and/or modify it under the terms of the GNU 
** General Public License as published by the Free Software Foundation. 
** Version 2 of the license should be included with this distribution in 
** the file LICENSE, as well as License.html. If the license is not 
** included with this distribution, you may find a copy at the FSF web 
** site at ’www.gnu.org’ or ’www.fsf.org’, or you may write to the 
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. 
** 
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, 
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR 
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY 
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR 
** REDISTRIBUTION OF THIS SOFTWARE. 
**/ 

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文件

/** 
** This program is free software. 
** 
** You may redistribute it and/or modify it under the terms of the GNU 
** General Public License as published by the Free Software Foundation. 
** Version 2 of the license should be included with this distribution in 
** the file LICENSE, as well as License.html. If the license is not 
** included with this distribution, you may find a copy at the FSF web 
** site at ’www.gnu.org’ or ’www.fsf.org’, or you may write to the 
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. 
** 
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, 
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR 
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY 
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR 
** REDISTRIBUTION OF THIS SOFTWARE. 
**/ 
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 = "file://com//kindani//test//LocalStrings.properties"; 
p = JProperties.loadProperties(name, JProperties.BY_SYSTEM_CLASSLOADER); 
assertEquals(value, p.getProperty(key)); 

name = "file://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_US

helloworld.title=Hello World!

requestinfo.title=Request Information Example
requestinfo.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 Example

requestparams.title=Request Parameters Example
requestparams.params-in-req=Parameters in this request:
requestparams.no-params=No Parameters, Please enter some
requestparams.firstname=First Name:
requestparams.lastname=Last Name:

cookies.title=Cookies Example
cookies.cookies=Your browser is sending the following cookies:
cookies.no-cookies=Your browser isn’t sending any cookies
cookies.make-cookie=Create a cookie to send to your browser
cookies.name=Name:
cookies.value=Value:
cookies.set=You just sent the following cookie to your browser:

sessions.title=Sessions Example
sessions.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 session
sessions.dataname=Name of Session Attribute:
sessions.datavalue=Value of Session Attribute:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 * 操作属性文件.<br>
 * 可以为我们的程序带来更方便的移植性,下面是一个示例,可以读、写、更改属性<br>
 * 读采用了两种方式,一种是采用Properties类<br>
 * 另外一种是采用资源绑定类ResourceBundle类<br>
 * 下面是源程序,里面有详细的注释:
 * 
 * @author 赵学庆 <A href="www.java2000.net" target=_blank>www.java2000.net</A>
 */
public class OperatePropertiesFile  {
  public OperatePropertiesFile () {
  }

  /**
   * 采用Properties类取得属性文件对应值
   * 
   * @parampropertiesFileNameproperties文件名,如a.properties
   * @parampropertyName属性名
   * @return根据属性名得到的属性值,如没有返回""
   */
  public static String getValueByPropertyName(String propertiesFileName, String propertyName) {
    String s = "";
    Properties p = new Properties();// 加载属性文件读取类
    FileInputStream in;
    try {
      // propertiesFileName如test.properties
      in = new FileInputStream(propertiesFileName);// 以流的形式读入属性文件
      p.load(in);// 属性文件将该流加入的可被读取的属性中
      in.close();// 读完了关闭
      s = p.getProperty(propertyName);// 取得对应的属性值
    } catch (Exception e) {
      e.printStackTrace();
    }
    return s;
  }

  /**
   * 采用ResourceBundel类取得属性文件对应值,这个只能够读取,不可以更改及写新的属性
   * 
   * @parampropertiesFileNameWithoutPostfixproperties文件名,不带后缀
   * @parampropertyName属性名
   * @return根据属性名得到的属性值,如没有返回""
   */
  public static String getValueByPropertyName_(String propertiesFileNameWithoutPostfix,
      String propertyName) {
    String s = "";
    // 如属性文件是test.properties,那此时propertiesFileNameWithoutPostfix的值就是test
    ResourceBundle bundel = ResourceBundle.getBundle(propertiesFileNameWithoutPostfix);
    s = bundel.getString(propertyName);
    return s;
  }

  /**
   * 更改属性文件的值,如果对应的属性不存在,则自动增加该属性
   * 
   * @parampropertiesFileNameproperties文件名,如a.properties
   * @parampropertyName属性名
   * @parampropertyValue将属性名更改成该属性值
   * @return是否操作成功
   */
  public static boolean changeValueByPropertyName(String propertiesFileName, String propertyName,
      String propertyValue) {
    boolean writeOK = true;
    Properties p = new Properties();
    InputStream in;
    try {
      in = new FileInputStream(propertiesFileName);
      p.load(in);//
      in.close();
      p.setProperty(propertyName, propertyValue);// 设置属性值,如不属性不存在新建
      // p.setProperty("testProperty","testPropertyValue");
      FileOutputStream out = new FileOutputStream(propertiesFileName);// 输出流
      p.store(out, "");// 设置属性头,如不想设置,请把后面一个用""替换掉
      out.flush();// 清空缓存,写入磁盘
      out.close();// 关闭输出流
    } catch (Exception e) {
      e.printStackTrace();
    }
    return writeOK;
  }
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics