转载:

一般来说,ResourceBundle类通常是用于针对不同的语言来使用的属性文件。

而如果你的应用程序中的属性文件只是一些配置,并不是针对多国语言的目的。那么使用Properties类就可以了。

通常可以把这些属性文件放在某个jar文件中。然后,通过调用class的getResourceAsStream方法,来获得该属性文件的流对象,再用Properties类的load方法来装载。

示例如下:

Class TestLoad  {

           
public
 
static
 
void
 main( String[] argv) 
{

                     InputStream 
is
 
=
 TestLoad.
class
.getResourceAsSteam(
"
myprops.properties
"
);

                     Properties p 
=
 
new
 Properties();

                     p.load(
is
);

                     System.
out
.println(p.
get
(
"
MAIL_SERVER_HOSTNAME
"
));

           }


}

有时候有些简单的配置文件可以没必要使用xml,其实ResourceBundle类就已经做的很好的。它甚至可以搜索到classpath里的jar文件中一些properties文件。

例如在jar文件中的根目录放置一个文件:test.properties,然后只要这个jar文件在classpath里。就可以使用这样的语句来获得一些属性:

ResourceBundle rb = ResourceBundle.getBundle("test");
  String s = rb.getString("MQ_Server_Address");
  System.out.println(s);

我们可以在每个对象中用ResourceBundle来读配置文件设置自己的值,也可以用一个固定的对象去读取然后保存下来以便以后使用。在每个
class中都去读配置文件会导致代码散乱,所以,只用一个class来进行读取是比较合理的做法。另外,由于I/O的速度比较慢,如果负责读取配置文件
的class是在每次用到这些配置项的时候去读文件,就容易成为性能上的瓶颈。为避免这样的情况,可以在初始化的时候就把配置项一次全部读入,并保存在静
态成员变量中。不过不排除会有对配置项进行动态读取的需求(因为某些应用是不能停掉的,比如应用服务器。在这些应用运行期间更新了配置文件,就需要在不不
关闭应用的情况下重新读入配置项)。以下的例子只考虑了静态读取的情况,如果是动态读取,则可以把读取配置文件的代码放到某个方法中,通过对某个事件的响
应来调用该方法更新配置项。

假设我们用来读取配置文件的class叫TestResourceBundle,配置项的值来自一个叫
property_en.properties的文件(该文件应该放到TestResourceBundle所对应的CLASSPATH的目录),有两个
值需要配置:name和value。首先,需要在该class中定义一些字符串常量,如下:

public static final String PROPERTIES_FILE_NAME = "property";
public static final String MY_NAME_KEY = "name";
public static final String MY_VALUE_KEY = "value";

其中PROPERTIES_FILE_NAME指出了文件的名字。实际读取的文件应该是property_en.properties,但
是只需要告诉ResourceBundle文件名是"property"就足够了。下划线和后面的"en"表示的是本地化信息。这里的en代
表"ENGLISH",后缀properties是默认的。MY_NAME_KEY和MY_VALUE_KEY表示配置项在配置文件中的名字,用
ResourceBundle的getString方法根据这些名字去读取相应的值。

然后,定义需要配置的变量。这些变量应该是静态的:
private static String myName;
private static String myValue;

然后进行静态初始化:
static {
 try {
   ResourceBundle bundle = ResourceBundle
     .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
   myName = bundle.getString(MY_NAME_KEY).trim();
   myValue = bundle.getString(MY_VALUE_KEY).trim();
 }
 catch(Exception ex) {
   System.err.println(  "[Property]:Can't Load property.properties");
   myName = "default name";
   myValue = "default value";
   System.out.println(  "myName will use the default value: " + myName);
   System.out.println(  "myValue will use the default value: " + myValue);
 }
}
 ResourceBundle bundle = ResourceBundle
  .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);


行代码初始化了一个ResourceBundle,Locale.ENGLISH用于指明本地化情况,因此会
从"property_en.properties"中去读取配置项。如果是Locale.CHINA,则会从
property_zh.properties中读取。这种机制使得程序的本地化变得简单。
 myName = bundle.getString(MY_NAME_KEY).trim();
这行代码读入配置文件中名为"name"的变量的值,并赋给静态变量myName。
此外这段代码还包含了例外处理,当读取失败的时候,配置项会使用缺省值。
这样,该类就通过ResourceBundle读取外存上的配置文件对数据进行了配置。

property_en.properties文件的内容如下
# properties sample
#
name=sega
value=100

其中以'#'开头的行为注释,ResourceBundle在遇到这些行的时候会忽略掉。

以下为完整的测试代码:

public class TestResourceBundle {
 public static final String PROPERTIES_FILE_NAME = "property";
 public static final String MY_NAME_KEY = "name";
 public static final String MY_VALUE_KEY = "value";
 
 private static String myName;
 private static String myValue;
 static {
   try {
     ResourceBundle bundle = ResourceBundle
  .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
     myName = bundle.getString(MY_NAME_KEY).trim();
     myValue = bundle.getString(MY_VALUE_KEY).trim();
   }
   catch(Exception ex) {
  System.err.println(    "[Property]:Can't Load property.properties");
  myName = "default name";
  myValue = "default value";
  System.out.println(    "myName will use the default value: " + myName);
  System.out.println(    "myValue will use the default value: " + myValue);
   }
 }
 
 public void print() {
  System.out.println("My name is: " + myName);
  System.out.println("My value is: " + myValue);
 }
 public static void main(String[] args) {
  TestResourceBundle test = new TestResourceBundle();
  test.print();
 }
}

ResourceBundle和Properties(转载)的更多相关文章

  1. java中读取配置文件ResourceBundle和Properties两种方式比较

    今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...

  2. ResourceBundle与Properties读取配置文件

    ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...

  3. Java中resourceBundle和Properties的区别

    第一种办法InputStream is = Test.class.getResourceAsStream("DbConfig.properties");Properties p = ...

  4. ResourceBundle读取properties配置文件

    package cn.rocker.readProperties; import java.util.ResourceBundle; import org.junit.Test; /** * @Cla ...

  5. 简单工厂模式使用ResourceBundle读取.properties配置文件

    在做项目时,遇到需要创建DAO.Service等类的实例的时候,想到用工厂方法来运作,而简单工厂方法又有明显的缺点: ①由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中 ...

  6. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...

  7. Spring Boot Common application properties(转载)

    转自官方文档:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.h ...

  8. ResourceBundle 读取properties文件中文乱码

    1.确认properties文件是什么编码格式,并确认文件在该格式下中文是正常显示的2.读取时候,进行转一层,先用ISO-8859-1读取字节流,然后根据properties的文件格式进行new St ...

  9. 使用ResourceBundle访问资源文件(properties)帮助类

    import java.util.ResourceBundle; /** * 读取properties文件的帮助类 * @author */ public class PropertiesUtil { ...

随机推荐

  1. iOS开发——数据持久化Swift篇&(三)SQLite3

    SQLite3 使用 //******************** 5.3 SQLite3存储和读取数据 func use_SQLite3() { //声明一个Documents下的路径 var db ...

  2. UICollectionViewController

    UICollectionViewController 目录 概述 UICollectionView UICollectionViewCell 代理方法 详细细节 概述 UICollectionView ...

  3. mysql二进制包安装与配置实战记录

    导读 一般中小型网站的开发都选择 MySQL 作为网站数据库,由于其社区版的性能卓越,搭配 PHP .Linux和 Apache 可组成良好的开发环境,经过多年的web技术发展,在业内被广泛使用的一种 ...

  4. 技术随笔 查找速度最快的Google IP

    转:http://www.xiumu.org/technology/the-find-the-fastest-in-the-google-ip.shtml 体验秒开GOOGLE的感觉! 在http:/ ...

  5. 乐观锁(optimistic locking)与悲观锁(pessimistic locking)

    首先,乐观锁(optimistic locking)与悲观锁(pessimistic locking)基本是针对数据处理来说,也就是跟数据库有关的术语,目的是为了解决并发处理时所遇到的相关性能问题,以 ...

  6. Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式

    Java去除掉HTML里面所有标签,主要就两种,要么用开源的jar处理,要么就自己写正则表达式.自己写的话,可能处理不全一些自定义的标签.企业应用基本都是能找开源就找开源,实在不行才自己写…… 1,开 ...

  7. 短小实用 渗透用的Python小脚本

    渗透的很多时候,找到的工具并不适用,自己码代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用. 一.记录root密码小工具 root.py #!/usr/bin/py ...

  8. xcode5项目图标添加

    转载文章 地址http://www.360doc.com/content/14/0103/08/14615320_342227413.shtml 最近提交itunesconnect应用时,有个警告说缺 ...

  9. centos下卸载rpm包

    rpm -qa|grep sphinx rpm -e sphinx..... 安全地卸载 RPM卸载软件包,并不是简单地将原来安装的文件逐个删除,那样做的话,可能会出现这样或那样的问题.如,A软件包依 ...

  10. iOS之GCD的局部解析

    一什么是GCD :(Grand [伟大] Central [中央]  Dispatch[调度]) GCD又名“伟大的中央调度器”,他是iOS4后才引进的一种多线程技术.开发者只需定义想执行的任务兵追加 ...