`
djob2008
  • 浏览: 130458 次
  • 性别: 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;
  }
}
 
分享到:
评论

相关推荐

    J2SE API读取Properties文件六种方法

    以上介绍了六种使用J2SE API读取Properties文件的方法,每种方法都有其适用场景。开发者可以根据实际需求选择最适合的方式来加载配置文件。需要注意的是,在处理输入流时,一定要确保及时关闭它们,避免资源泄露的...

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

    本文将详细介绍六种使用J2SE API(Java标准版API)来读取Properties文件的方法,帮助开发者更好地理解和操作这类文件。 1. 使用Properties类的load()方法 这是最基础且常用的方法,直接通过InputStream读取...

    API读取Properties文件的六种方法

    本文将详细介绍六种使用J2SE API读取`Properties`文件的方法。 #### 1. 使用 `java.util.Properties` 类的 `load()` 方法 这种方法是最常见的读取`Properties`文件的方式。它涉及到创建一个`InputStream`来读取...

    others

    "使用J2SE API读取Properties文件的六种方法.txt"可能详细列举了从Java标准版库(J2SE)中加载和操作Properties文件的不同方式,包括InputStream、Properties类的方法等。 6. **flashplayer-win.zip**: 这可能是...

    在web和j2se中两个不同环境下 读取配置文件 备忘

    配置文件通常用于存储系统设置、数据库连接信息、第三方服务的API密钥等,这些数据需要在程序运行时被读取。本备忘主要关注在Web环境(如Tomcat、Jetty等)和J2SE(Java Standard Edition)环境中如何读取配置文件,...

    J2SE.programming.SimpleConfig.code.rar_java programming

    开发者可以使用Java的标准API,如`Properties`类来加载和解析.properties文件,或者使用`DOM`、`SAX`或`StAX`解析器来处理.xml文件。然而,这些原生方法可能不够灵活,对于复杂的配置需求,可能需要自定义解决方案,...

    fundamentals of the javamail api

    3. **编写代码**:使用JavaMail API提供的类和方法编写邮件相关的功能。 #### 五、核心类回顾 JavaMail API的核心类主要包括: - **Session**:用于创建邮件会话,包含邮件发送的所有设置。 - **Properties**:...

    网络通讯更自由 谈Java串行端口技术协议.doc

    Java串行端口技术协议是Java编程中用于实现串行通信的一种方法,它允许开发者通过Java程序控制串行端口,实现与各种设备如Modem、PDA、测量仪器等的交互。本文主要关注RS232串行通讯协议,这是最常见的一种串行通信...

    java软件工程师课程详细版.docx

    本课程旨在提供 Java 软件工程师所需的详细知识和技能,涵盖 Java 语言基础、面向对象编程、集合编程、多线程编程、GUI 编程、文件读写、对象序列化、异常处理、网络编程、国际化、J2SE 5.0 新特性、设计模式、反射...

    Quartz调度学习笔记

    在配置文件中,你需要指定 `org.quartz.plugin.jobInitializer.fileName` 属性,其值为 `/quartz_jobs.xml`,这个值指明了 Quartz 读取 Jobs 配置的路径。 `quartz_jobs.xml` 文件则是 Quartz 的任务定义文件,它...

    阿里云-负载均衡服务SDK手册.pdf

    开发者需将解压后的`aliyun-sdk-java-online_standard-20141120.jar`文件添加到项目构建路径中,例如在Eclipse中,通过右键点击工程 -&gt; Properties -&gt; Java Build Path -&gt; Libraries -&gt; Add External JARs进行导入。...

    javamail-1_4.zip

    这个“javamail-1_4.zip”文件包含的是JavaMail 1.4版本的源代码、API文档和其他相关资源,使得开发者能够在J2SE环境中开发与邮件相关的应用,而无需额外安装。J2EE平台虽然自身集成了邮件服务支持,但对于J2SE环境...

    java初学者的比较好的学习路线(转)

    - **文件读写**:掌握Properties类的使用方法,实现属性文件的读写操作。 ##### 实践项目 - **操作系统模拟**:设计一个简单的操作系统模型,实现进程调度、内存管理等功能。 - **飞机大战游戏**:开发一款简单的...

    2022年Java串行端口技术协议Java教程.docx

    Java串行端口技术协议是Java编程中用于实现串行通信的一种方法,广泛应用于设备间的交互,如PC、PDA、手机、USB设备等。本文将深入探讨2022年的Java串行通信协议,特别是基于RS232标准。 **串行通信概述** 串行通信...

    java软件工程师课程详细版.pdf

    - **文件读写**:涉及流的使用、二进制流、文本字符流等,通过实践编写文本编辑器加深理解。 7. **对象序列化**: - **序列化与反序列化**:了解如何将对象转换为字节流以便持久化存储或网络传输。 8. **异常...

    Java源码--自编的电话本

    8. **文件操作**:项目可能包含读取和保存配置文件的代码,比如数据库连接信息,这些信息可能以XML或properties文件的形式存储。 9. **设计模式**:在编写源码时,开发者可能应用了一些常见的设计模式,如单例模式...

    Java学习教程

    - **Properties类**:用于读写配置文件。 - **设计模式**:如工厂模式(Factory)、单例模式(Singleton)、策略模式(Strategy)、观察者模式(Observer)等,这些模式帮助开发者解决常见的软件设计问题。 ##### 4. 调试与...

    zxing sdk for 二维码

    1. **JavaSE**:对于桌面应用开发者,ZXing提供了Java标准版(JavaSE)的API,可以让你在Java应用中轻松地添加二维码的读取和生成。这包括`com.google.zxing.client.j2se`包下的类,如`CommandLineEncoder`和`...

Global site tag (gtag.js) - Google Analytics