关于properties文件在项目中的使用
一.介绍:
项目中经常把一些常用的用户名和密码都填写到一个对应的配置文件中,这样每次修改密码或者用户名的时候就可以直接修改这个配置文件了,不用动源码.
这里讲两种方式读取properties文件的方法.一个是用HashTable下的Properties类一个是用国际化的ResourceBundle类.
二.第一种:Properties类读取properties配置文件
下面的代码是在一个web工程中运行的,具体解释看代码中的注释:
import java.io.InputStream;
import java.util.Properties; import com.chinadigitalvideo.filter.PropertiesUtil; public class PropertiesAction {
//把properties中用到的常量又和全局相关声明为static和final类型的.
public static final String CLASSDRIVER ;
public static final String URL ;
public static final String NAME ;
public static final String PASSWORD ; public static final String RETRYTIMES ;
public static final String LOCKDEADLINE ;
/*
用到Javase中继承于HashTable的Properties类,来读取properties配置文件获得键值对信息.
如果是读取一个普通的txt文本文件使用File类来读取。
properties文件中都是一些静态的常量,所以把这块读取的代码写在静态代码块中 不是写在普通的方法
*/
static{
Properties props = new Properties();
/*
方式一:
加载读取该配置文件需要使用Properties的load方法,当然load()方法中是读取文件的流
props.load(new FileInputStream("src/db.properties"));
但是此项目是个web项目,打包发布到服务器上,war包中压根没有src目录,所以不能用用这中路径来读取文件.
应该用类的加载器来读取这个文件.怎么通过类加载器获得这个db.properties文件.
*/
ClassLoader classLoader = PropertiesAction.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("db.properties");
try {
props.load(is);
} catch (Exception e) {
e.printStackTrace();
}
CLASSDRIVER = props.getProperty("driverClass");
URL = props.getProperty("url");
NAME = props.getProperty("name");
PASSWORD = props.getProperty("password");
/*
方式二: 需要PropertiesAction.java 文件和 要读取的login.properties配置文件在一个目录下 */
InputStream inputStream = PropertiesAction.class.getResourceAsStream("login.properties");
try {
props.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
RETRYTIMES = props.getProperty("retrytimes");
LOCKDEADLINE = props.getProperty("lockdeadline");
}
}
为说明ClassLoader作用的根目录附录相关截图:
图1:Debug代码,官产ClassLoader对象的信息 和 项目的源码编译路径做比较
图2:打成war包之后的目录如下,WebContent是这个web项目的根目录,打成war包后,所有的代码资源都在此目录下, 源码编译后的class文件在上图设置的路径/WEB-INF/classes下
三.ResourceBundle类读取Properties方法(此处也是放在web项目中用的)
1.示例代码
import java.util.ResourceBundle; public class ResourceBundleAction {
//用到的常量又和全局相关声明成static 和final类型的.
public static final String CLASSDRIVER ;
public static final String URL ;
public static final String NAME ;
public static final String 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使用详解
myres_zh_CN.properties
TestResourceBundle.java
import java.util.Locale;
import java.util.ResourceBundle; public class TestResourceBundle {
public static void main(String[] args) {
Locale locale1 = new Locale("zh", "CN");
ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);
System.out.println(resb1.getString("aaa")); ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());
System.out.println(resb1.getString("aaa")); Locale locale3 = new Locale("en", "US");
ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);
System.out.println(resb3.getString("aaa"));
}
}
在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(String language, String country)
Locale(String language, String country, String variant)
package cn.itcast.resoucebundle; import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle; public class I18nMessages {
public static final String KEY_NOT_FOUND_PREFIX = "!!!"; //$NON-NLS-1$ public static final String KEY_NOT_FOUND_SUFFIX = "!!!"; //$NON-NLS-1$ private static final String BUNDLE_NAME = "messages"; //$NON-NLS-1$
private static final String BUNDLE_NAME2 = "cn.itcast.interfaceAbstract.messages"; //$NON-NLS-1$ private static final String PLUGIN_ID = "cn.itcast.resourcebundle"; //$NON-NLS-1$ private static ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME2); public static String getString(String key, String pluginId, ResourceBundle resourceBundle) {
if (resourceBundle == null) {
return KEY_NOT_FOUND_PREFIX + key + KEY_NOT_FOUND_SUFFIX;
}
try {
return resourceBundle.getString(key);
} catch (MissingResourceException e) {
return KEY_NOT_FOUND_PREFIX + key + KEY_NOT_FOUND_SUFFIX;
}
} public static String getString(String key, String pluginId, ResourceBundle resourceBundle, Object... args){
return MessageFormat.format(getString(key, pluginId, resourceBundle),args);
} public static String getString(String key, Object... args){
return getString(key, PLUGIN_ID, resourceBundle, args);
}
public static void main(String[] args) {
String test = "kxh";
String test2 = "Yes,I am";
System.out.println(I18nMessages.getString("name",test,test2));//这个方法设置的可以跟多个参数.
}
}
输出:
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()方法
关于properties文件在项目中的使用的更多相关文章
- Eclipse中定位当前文件在项目中的位置
点击红色框内的按钮,就能定位当前文件在项目中的位置, 另外, 找到位置后记得再点击一下这个按钮, 要不然每次打开一个文件都会自动定位
- 装载Properties资源文件的项目中使用
ssm项目中打算将发短信的每小时每天的限定变成可配置的.于是将配置信息写在资源文件中,现在有两种方式加载资源文件,一个是使用spring注入方式,@Value注解注入,当然,前面需要在项目中装载.第二 ...
- java加载properties文件的六中基本方式实现
java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...
- idea里绝对不要直接复制文件到项目中的另一处
否则那样会将使用被复制文件的那些地方 文件名会变成复制后的那个 而路径是原来的 所以会导致找不到文件 所以绝对不要直接复制文件或者包或者目录到项目中的另一处 需要时应该新建文件 把代码复制进去 这种事 ...
- 导出Excel文件(项目中会遇到很多将一些数据导出Excel或者et)
最近在项目中,遇到一些需求,就是将数据导出来,以Excel文件为主:就自己简单的做一些demo:供初学者来学习: // 定义一个保存文件的路径位置 SaveFileDialog dlgPath = n ...
- Visual studio 能否定位打开文件在项目中的位置
文件位置:http://zhidao.baidu.com/link?url=FmwuCXTR2ptnRfqr7xGGPrnoXaONDAWgvO6iP4Dn736DwL7hEZCwQqanJbE0di ...
- 关于一个多个.cpp文件的项目中,函数出现未定义引用错误
编译的话,必须把全部的c文件都要编译的啊,只编译一个c算怎么个逻辑呢?编译实际上是2个过程,编译和链接.编译过程只检查所有的符号(变量,函数)有没有声明,即只需要h文件生命就够了.但是链接时候,需要找 ...
- 获取tomcat上properties文件的内容——方便文件存储位置的修改,解耦和
在java web开发的时候经常会用到读取读取或存放文件,这个文件的默认路径在哪里呢?写死在程序里面显然是可以的,但这样子不利于位于,假如有一天项目从window移植到linux,或者保存文件的路径变 ...
- .properties文件的使用
在很多项目中我们都会使用到.properties文件对我们的项目进行配置,今天就介绍一下.properties文件在项目中的使用: 如下图,我们项目中有一个名为project.properties的p ...
随机推荐
- uva 11997 K Smallest Sums 优先队列处理多路归并问题
题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的. 思路:优先队列处理多路归并,每个状态含有K个元素.详见刘汝佳算法指南. #include<iostream> #i ...
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和 ...
- 【转】SQL中Group By的使用
1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...
- 【转载】free查看内存
http://blog.csdn.net/hylongsuny/article/details/7742995 free 命令相对于top 提供了更简洁的查看系统内存使用情况:$ free ...
- C++&OpenCV中读取灰度图像到数组的两种
如标题所言,此处是对于灰度图像而言 ///method 1 read the image data one by one for (int row = 0, i = 0;row < imgDst ...
- 新建数据库,然后使用SQL语句创建表、存储过程、用户说明
需要在数据库的安全性,用户那里为用户设置一下权限
- ASP.NET奇葩说
1.form表单 在asp.net中(即runat="server"特性时)method默认值为post 在html中默认是get. 2.Web应用程序项目和网站项目:前者后台文 ...
- C#抽象工厂模式的几种实现方法及比较
C#抽象工厂模式的几种实现方法及比较 本文转自:http://hi.baidu.com/tufeivista/blog/item/2ca9702978dcc6fb99250a81.html 利用设计模 ...
- 关于cshtml中的js对动态编译支持的问题
问题:MVC4中支持对ViewBag.ViewDate等的动态编译,但是在js中对它的支持就是有问题.虽然是可以动态编译,但是动态编译之后,断点无法获取. $.getJSON("/api/A ...
- svn项目导入
svn项目导入 在已建立好svnserverserver的情况下.且所用电脑上已装好svn,在电脑上导入svn项目 首先,新建目录.点击鼠标右键,选择TortoiseSVN–>export 然后 ...