转载:

一般来说,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. PHP __autoload函数(自动载入类文件)的使用方法(转)

    详细出处参考:http://www.jb51.net/article/29625.htm 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进 ...

  2. Java HttpClient使用小结

    httpclient是apache的一个项目:http://hc.apache.org/ 文档比較完好:http://hc.apache.org/httpcomponents-client-ga/tu ...

  3. qregularexpression和qregexp的区别

    QRegularExpression 是Qt 5.0才引进的,相对于QRegExp,QRegularExpression class修复了很多bug,提高了效率,提供了对Perl的RegEx几乎全面兼 ...

  4. Cloudera Error: "Failed to handle Heartbeat Response"

    在使用cloudera manager安装CDH过程中,发现安装进程卡在给某个slave机分配parcel上. 查agent的log发现如下错: ...MainThread agent ERROR F ...

  5. eclipse的scala环境搭建

    两种方法使eclipse安装scala环境(eclipse luna) 1.下载eclipse for scala IDE http://scala-ide.org/download/sdk.html ...

  6. ScrollView嵌套recyclerView出现的滑动问题

    记得以前在解决scrollView与ListView嵌套问题时,那个时候是自定义了listView去测量listView高度,今天项目中刚 好碰到了要用recycerView,同样也是嵌套在scrol ...

  7. 【原创】利用C++ RAII技术自动回收堆内存

    [说明]这篇文章本来发布在我个人网站的博客上,但由于:1,打算以cnblogs为家了:2. 关于智能指针部分需要修订,所有将修订版发在这里,作为第一篇文章. 常遇到的动态内存回收问题 在C++的编程过 ...

  8. vb6如何将MSHFlexGrid控件中的内容导出为Excel

    首先的是是准备工作 需要引用 Microsoft Excel 11.0 Object Library 需要添加控件Mircrosoft Hierarchical FlexGrid Control 6. ...

  9. 【java.math.BigInteger】常用函数

    1. /* 返回此BigInteger的函数正负号. 此方法返回-1,0或1作为此BigInteger的值对应是负,零或正数. */ java.math.BigInteger.signum(BigIn ...

  10. Jquery Validate验证是否为图片格式

    //验证是否为图片 jQuery.validator.addMethod("checkPic", function (value, element) { var filepath ...