一.介绍:

项目中经常把一些常用的用户名和密码都填写到一个对应的配置文件中,这样每次修改密码或者用户名的时候就可以直接修改这个配置文件了,不用动源码.

这里讲两种方式读取properties文件的方法.一个是用HashTable下的Properties类一个是用国际化的ResourceBundle类.

二.第一种:Properties类读取properties配置文件

下面的代码是在一个web工程中运行的,具体解释看代码中的注释:

1 importjava.io.InputStream;2 importjava.util.Properties;3

4 importcom.chinadigitalvideo.filter.PropertiesUtil;5

6 public classPropertiesAction {7 //把properties中用到的常量又和全局相关声明为static和final类型的.

8 public static finalString CLASSDRIVER ;9 public static finalString URL ;10 public static finalString NAME ;11 public static finalString PASSWORD ;12

13 public static finalString RETRYTIMES ;14 public static finalString LOCKDEADLINE ;15 /*

16 用到Javase中继承于HashTable的Properties类,来读取properties配置文件获得键值对信息.17 如果是读取一个普通的txt文本文件使用File类来读取。18 properties文件中都是一些静态的常量,所以把这块读取的代码写在静态代码块中 不是写在普通的方法19 */

20 static{21 Properties props = newProperties();22 /* 方式一:

23 加载读取该配置文件需要使用Properties的load方法,当然load()方法中是读取文件的流24 props.load(new FileInputStream("src/db.properties"));25 但是此项目是个web项目,打包发布到服务器上,war包中压根没有src目录,所以不能用用这中路径来读取文件.26 应该用类的加载器来读取这个文件.怎么通过类加载器获得这个db.properties文件.27 */

28 ClassLoader classLoader = PropertiesAction.class.getClassLoader();29 InputStream is = classLoader.getResourceAsStream("db.properties");30 try{31 props.load(is);32 } catch(Exception e) {33 e.printStackTrace();34 }35 CLASSDRIVER = props.getProperty("driverClass");36 URL = props.getProperty("url");37 NAME = props.getProperty("name");38 PASSWORD = props.getProperty("password");39 /*

40 方式二: 需要PropertiesAction.java 文件和 要读取的login.properties配置文件在一个目录下 */

43 InputStream inputStream = PropertiesAction.class.getResourceAsStream("login.properties");44 try{45 props.load(inputStream);46 } catch(Exception e) {47 e.printStackTrace();48 }49 RETRYTIMES = props.getProperty("retrytimes");50 LOCKDEADLINE = props.getProperty("lockdeadline");51 }52 }

为说明ClassLoader作用的根目录附录相关截图:

图1:Debug代码,官产ClassLoader对象的信息  和 项目的源码编译路径做比较

图2:打成war包之后的目录如下,WebContent是这个web项目的根目录,打成war包后,所有的代码资源都在此目录下, 源码编译后的class文件在上图设置的路径/WEB-INF/classes下

三.ResourceBundle类读取Properties方法(此处也是放在web项目中用的)

1.示例代码

importjava.util.ResourceBundle;public classResourceBundleAction {//用到的常量又和全局相关声明成static 和final类型的.

public static finalString CLASSDRIVER ;public static finalString URL ;public static finalString NAME ;public static finalString PASSWORD ;static{/*javase中的提供的一个国际化的类 ResourceBundle类.使用这个类可以轻松地本地化或翻译成不同的语言

其中getBundle(String baseName)方法的作用是

baseName - 资源包的基本名称,是一个完全限定类名

具有给定基本名称和默认语言环境的资源包*/CLASSDRIVER= ResourceBundle.getBundle("db").getString("driverClass");

URL= ResourceBundle.getBundle("db").getString("url");

NAME= ResourceBundle.getBundle("db").getString("name");

PASSWORD= ResourceBundle.getBundle("db").getString("password");

}

}

2.java.util.ResourceBundle使用详解

说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties,

如果是默认的,直接写为:自定义名.properties

比如:

myres_en_US.properties

myres_zh_CN.properties

myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties

没有提供语言和地区的资源文件是系统默认的资源文件。

资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

定义三个资源文件,放到src的根目录下面(必须这样,或者你放到自己配置的calsspath下面)。

TestResourceBundle.java

1 importjava.util.Locale;2 importjava.util.ResourceBundle;3

4 public classTestResourceBundle {5 public static voidmain(String[] args) {6 Locale locale1 = new Locale("zh", "CN");7 ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);8 System.out.println(resb1.getString("aaa"));9

10 ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());11 System.out.println(resb1.getString("aaa"));12

13 Locale locale3 = new Locale("en", "US");14 ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);15 System.out.println(resb3.getString("aaa"));16 }17 }

在src根目录下有:

myres.properties

aaa=good

bbb=thanks

myres_en_US.properties

aaa=good

bbb=thanks

myres_zh_CN.properties

aaa=\u597d

bbb=\u591a\u8c22

运行结果:

good

3.认识Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

使用此类中的构造方法来创建 Locale:

Locale(String language)

Locale(String language, String country)

Locale(String language, String country, String variant)

创建完 Locale 后,就可以查询有关其自身的信息。使用 getCountry 可获取 ISO 国家代码,使用 getLanguage 则获取 ISO 语言代码。可用使用 getDisplayCountry 来获取适合向用户显示的国家名。同样,可用使用 getDisplayLanguage 来获取适合向用户显示的语言名。有趣的是,getDisplayXXX 方法本身是语言环境敏感的,它有两个版本:一个使用默认的语言环境作为参数,另一个则使用指定的语言环境作为参数。

1 packagecn.itcast.resoucebundle;2

3 importjava.text.MessageFormat;4 importjava.util.MissingResourceException;5 importjava.util.ResourceBundle;6

7 public classI18nMessages {8 public static final String KEY_NOT_FOUND_PREFIX = "!!!"; //$NON-NLS-1$

9

10 public static final String KEY_NOT_FOUND_SUFFIX = "!!!"; //$NON-NLS-1$

11

12 private static final String BUNDLE_NAME = "messages"; //$NON-NLS-1$

13 private static final String BUNDLE_NAME2 = "cn.itcast.interfaceAbstract.messages"; //$NON-NLS-1$

14

15 private static final String PLUGIN_ID = "cn.itcast.resourcebundle"; //$NON-NLS-1$

16

17 private static ResourceBundle resourceBundle =ResourceBundle.getBundle(BUNDLE_NAME2);18

19 public staticString getString(String key, String pluginId, ResourceBundle resourceBundle) {20 if (resourceBundle == null) {21 return KEY_NOT_FOUND_PREFIX + key +KEY_NOT_FOUND_SUFFIX;22 }23 try{24 returnresourceBundle.getString(key);25 } catch(MissingResourceException e) {26 return KEY_NOT_FOUND_PREFIX + key +KEY_NOT_FOUND_SUFFIX;27 }28 }29

30 public staticString getString(String key, String pluginId, ResourceBundle resourceBundle, Object... args){31 returnMessageFormat.format(getString(key, pluginId, resourceBundle),args);32 }33

34 public staticString getString(String key, Object... args){35 returngetString(key, PLUGIN_ID, resourceBundle, args);36 }37 public static voidmain(String[] args) {38 String test = "kxh";39 String test2 = "Yes,I am";40 System.out.println(I18nMessages.getString("name",test,test2));//这个方法设置的可以跟多个参数.41 }42 }

输出:

ResourceBundle.getBundle(BUNDLE_NAME2);的时候

Are you kxh?Yes,I am

This is the second one

ResourceBundle.getBundle(BUNDLE_NAME);的时候

Are you kxh?Yes,I am

This is the first one

对应的messages.properties中的参数设置

上面用到了MessageFormat.format()方法

java resourcebundle properties_Java使用Properties类和ResourceBundle类读取properties文件相关推荐

  1. java 读取ppt文件_解析Java的InputStream类并借助其读取ppt文件

    1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     ...

  2. java取linux本地xml,java-使用apache poi读取.xlsx文件会在Linux机器...

    我有一个读取.xlsx文件并向用户显示内容的应用程序.该应用程序在Windows环境下运行良好. 我将此Web应用程序的.war文件部署在ubuntu服务器上的tomcat6上.我还复制了服务器上的. ...

  3. 使用工具类按一定规则读取Excel文件

    工作中需要按照功能分类去批量新增数据,数据的载体为Excel文件.现编写一个工具类按照业务规则来读取并处理Excel文件数据. 目录 1.工具类 2.具体实现 总结 1.工具类 在读取文件这里,使用h ...

  4. gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)

    前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间 ...

  5. java导入excel 实例_Java数据导入功能之读取Excel文件实例

    在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主.下面给出用java读取excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套A ...

  6. jxl读取html格式excel,基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)...

    packagewebui.xUtils;importjava.io.File;importorg.testng.Reporter;importjxl.Cell;importjxl.Sheet;impo ...

  7. Properties 工具类 和 ResourceBundle 工具类

    Properties 工具类 和 ResourceBundle 工具类(接上一篇JavaIO包) 2 Properties 工具类 2.1 Properties集合的基本使用 2.2 Properti ...

  8. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

  9. JAVA读取Properties文件对象常用方法总结

    实际开发中,总是会需要用到配置文件的,常用的就是properties.xml.json.比如,使用jdbc访问数据库时,我们就可以将driver.url.username.password这几个参数记 ...

  10. Java读取Properties配置文件

    目录 1.Properties类与Properties配置文件 2.Properties中的主要方法 3.示例 1.Properties类与Properties配置文件 Properties类继承自H ...

最新文章

  1. java list addall源码_Java集合:ArrayList源码分析
  2. boost::hash_range相关的测试程序
  3. sublime配置python运行环境
  4. 第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波
  5. 依赖注入模式中,为什么用对象而不是用数组传递?
  6. 一些常用的meta标签及其作用
  7. 【debug】UnicodeDecodeError: codec can't decode byte 0xbd in position 4: invalid start byte
  8. 十年 | 我花了十年,才弄明白了Node.js
  9. B00008 C++实现的大整数计算(一)
  10. 程序是怎么跑起来的? —— CPU 是什么?C/C++程序的运行
  11. 一分钟掌握Python字典的用法
  12. Docker镜像下载加速的两种方法
  13. 通信原理及系统系列8—— 如何消除码间串扰
  14. 淘宝评论不回复买家怎样看到买家评论,如何提前处理买家差评
  15. UIKit的简单入门介绍
  16. HDU - Polygons(半平面交)
  17. 计算机之父—— 约翰·冯·诺依曼
  18. 2WD远程控制小车——云端设计
  19. touchjs中,touch的使用
  20. oracle FAQ

热门文章

  1. Java基本数据类型之char
  2. 计算机统计分析spss试卷,《SPSS计算机统计分析方法》习题A卷.doc
  3. 计算机教室联想系统管理员密码,联想电脑EDU开放模式管理员密码忘记了怎么办...
  4. Zabbix4.0安装教程
  5. python散点图获取边界_获取离散点的边界点
  6. matlab covar,delta CoVaR 系统性风险指标计算
  7. windows下ssh远程连接服务器
  8. 看图找茬找不同小程序源码
  9. 如何降低论文查重率?
  10. mysql嵌套查询语句