如何使用java类来加载propertiesjava如何加载配置文件件的属性信息

yjz毕竟是云
获取属性文件里的信息:俩种方式
首先需要将属性文件交给容器如下:
&!-- 使用注解注入properties中的值
(将属性文件里的信息交给spring来管理)
&bean id="projectInfo" class="org.springframework.beans.factory.config.PropertiesFactoryBean"&
&property name="locations"&
&value&classpath:config.properties&/value&
&/property&
&!-- 设置编码格式 --&
&property name="fileEncoding" value="UTF-8"&&/property&
方法一:需要写属性文件的对应的实体类!再在实体类的属性上用#{beanId[key]})标签,将属性文件里的值注入到对象属性里!如下:
package com.
import org.springframework.beans.factory.annotation.V
import org.
@Component("configProperty")
public class ConfigProperty {
@Value("#{projectInfo[author_name]}")
private String author_name;
@Value("#{projectInfo[project_info]}")
private String project_info;
public String getAuthor_name() {
return author_name;
public void setAuthor_name(String author_name) {
this.author_name = author_
public String getProject_info() {
return project_info;
public void setProject_info(String project_info) {
this.project_info = project_
单元测试:
* 测试 Spring注解方式注入properties文件内容
* @author yuanjz
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:WebRoot/WEB-INF/test-servlet.xml"})
public class PropertiesFactoryTest {
@Resource(name="configProperty")
private ConfigProperty configProperty;
* 该方式需要写配置文件(config.properties)对应的实体类 并且使用@value注解给实体类属性注入值,比较麻烦!
public void test(){
System.out.println("方式一:"+configProperty.getAuthor_name());
System.out.println("方式一:"+configProperty.getProject_info());
方法二:使用类 与结合的方式,来获取配置文件里的属性值!
说白了就是:属性文件注册到容器中,成为一个!再在代码中将该注入到对象中!
不需要实体类,直接可以单元测试!如下:
* 测试 Spring注解方式注入properties文件内容
* @author yuanjz
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:WebRoot/WEB-INF/test-servlet.xml"})
public class PropertiesFactoryTest {
/*将spring容器里的属性文件信息注入到Properties对象里!*/
@Resource(name="projectInfo")
private Properties
projectInfo;
* 使用java.util.properties类 与spring结合的方式,来获取配置文件(config.properties)里的属性值!
说白了就是:属性文件注册到容器中,成为一个!再在代码中将该注入到对象中!
projectInfo.getProperty("author_name");
projectInfo.getProperty("project_info");
System.out.println("方式二,名字: "+projectInfo.getProperty("author_name")+"信息:"+projectInfo.getProperty("project_info"));
测试结果:方式二,名字: 张三 信息:该项目主要是用于写一些demo
方式一:张三
方式一:该项目主要是用于写一些demo
&!--EndFragment--&原文链接:
阅读排行榜用户名:trans
文章数:15
评论数:28
访问量:118309
注册日期:
阅读量:1297
阅读量:3317
阅读量:460940
阅读量:1145499
51CTO推荐博文
java.util.Properties类 学习笔记
学习目标:
1、认识properties文件,理解其含义,会正确创建properties文件。
2、会使用java.util.Properties类来操作properties文件。
3、掌握相对路径,能正确书写一个properties文件的相对路径。
一、认识properties文件
1、properties文件是一个文本文件
2、properties文件的语法有两种,一种是注释,一种属性配置。
&注&&& 释:前面加上#号
&属性配置:以“键=值”的方式书写一个属性的配置信息。
3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
4、properties的属性配置键值前后的空格在解析时候会被忽略。
5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。
例如,下面一个properties文件:
#正确的properties配置文件 aaa=1\ &&&&11 b bb&&&&=&&&& 222
#格式良好的properties文件 aaa=111 bbb=222
二、解读java.util.Properties类
1、Properties类的层次结构
java.lang.Object
& java.util.Dictionary&K,V&
&&&&& java.util.Hashtable&Object,Object&
&&&&&&&&& java.util.Properties
从层次机构看,Properties类实现了Map接口,因为HashTable实现了Map接口,因此Properties类本质上是一种简单的Map容器。
实际上,Properties类本身表示了对一种Map结构的操作。properties文件本身就表示了一个“键值对”的集合。因此,Properties类属于集合容器的家族,在使用前应该创建一个Properties的容器,实际上就是创建一个默认不带参数的Properties对象。以后通过别的方式给里面添加“键值对”。
2、properties文件与Properties类的关系
通过properties文件可以填充Properties类。
也可以通过xml文件来填充Properties类。
可以通过绝对路径方式加载Properties文件信息,也可以使用相对路径加载。
1、以绝对相对路径方式加载properties文件信息。
2、将Properties对象持久化到一个properties文件或者一个xml文件中。
3、修改并持久化properties文件。
测试代码:
测试的properties文件:
#格式良好的properties文件 aaa=111 bbb=222
package import java.io.*; import java.util.P /** * Properties类测试 * User: xiaohui * Date:
21:04:54 */ public class TestProperties { &&&&&&&&public static void main(String args[]) throws IOException { &&&&&&&&&&&&&&&&testProperties(); &&&&&&&&&&&&&&&&test1(); &&&&&&&&} &&&&&&&&public static void testProperties() throws IOException { &&&&&&&&&&&&&&&&System.out.println("------------testProperties-------------"); &&&&&&&&&&&&&&&&//将properties文件加载到输入字节流中 &&&&&&&&&&&&&&&&InputStream is = new FileInputStream("D:\\myprojects\\lession4\\src\\stu\\ttt.properties"); &&&&&&&&&&&&&&&&//创建一个Properties容器 &&&&&&&&&&&&&&&&Properties prop = new Properties(); &&&&&&&&&&&&&&&&//从流中加载properties文件信息 &&&&&&&&&&&&&&&&prop.load(is); &&&&&&&&&&&&&&&&//循环输出配置信息 &&&&&&&&&&&&&&&&for (Object key : prop.keySet()) { &&&&&&&&&&&&&&&&&&&&&&&&System.out.println(key + "=" + prop.get(key)); &&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&//定义一个输出流 &&&&&&&&&&&&&&&&OutputStream os1 = new FileOutputStream("C:\\ttt.xml"); &&&&&&&&&&&&&&&&OutputStream os2 = new FileOutputStream("C:\\ttt.properties"); &&&&&&&&&&&&&&&&//从Properties对象导出导出到xml &&&&&&&&&&&&&&&&prop.storeToXML(os1, "我从properties导出的XML配置文件"); &&&&&&&&&&&&&&&&//从Properties对象导出properties文件 &&&&&&&&&&&&&&&&prop.store(os2, "我从properties导出的XML配置文件"); &&&&&&&&&&&&&&&&is.close(); &&&&&&&&&&&&&&&&os1.close(); &&&&&&&&&&&&&&&&os2.close(); &&&&&&&&&&&&&&&&//从xml加载配置信息,填充Properties容器 &&&&&&&&&&&&&&&&prop.loadFromXML(new FileInputStream("C:\\ttt.xml")); &&&&&&&&&&&&&&&&//循环输出配置信息 &&&&&&&&&&&&&&&&System.out.println("我从导出的xml加载配置文件信息!"); &&&&&&&&&&&&&&&&for (Object key : prop.keySet()) { &&&&&&&&&&&&&&&&&&&&&&&&System.out.println(key + "=" + prop.get(key)); &&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&//修改Properties对象,并持久化到一个文件 &&&&&&&&&&&&&&&&prop.put("呵呵呵", "嘎嘎嘎"); &&&&&&&&&&&&&&&&OutputStream os3 = new FileOutputStream("C:\\ttt1.xml"); &&&&&&&&&&&&&&&&prop.storeToXML(os3, "我从properties导出的XML配置文件"); &&&&&&&&&&&&&&&&os3.close(); &&&&&&&&} &&&&&&&&/** &&&&&&&& * 以相对路径方式加载properties文件 &&&&&&&& * &&&&&&&& * @throws IOException &&&&&&&& */ &&&&&&&&public static void test1() throws IOException { &&&&&&&&&&&&&&&&System.out.println("------------test1-------------"); &&&&&&&&&&&&&&&&Properties p = new Properties(); &&&&&&&&&&&&&&&&p.load(TestProperties.class.getResourceAsStream("/stu/ttt.properties")); &&&&&&&&&&&&&&&&for (Object key : p.keySet()) { &&&&&&&&&&&&&&&&&&&&&&&&System.out.println(key + "=" + p.get(key)); &&&&&&&&&&&&&&&&} &&&&&&&&} }
运行结果:
------------testProperties------------- bbb=222 aaa=111 我从导出的xml加载配置文件信息! bbb=222 aaa=111 ------------test1------------- bbb=222 aaa=111 Process finished with exit code 0
C:盘下写入的文件如下:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/645750.png" border="0" />
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/790671.png" border="0" />
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/825890.png" border="0" />
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/805203.png" border="0" />
呵呵,全部达到预期目标。
&本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:┆阅读(0)┆评论(0)
12:03:58 23:53:15 11:32:03 14:14:00 16:24:39 14:07:11 17:19:06 20:27:30 16:17:53 17:21:18 18:53:54查看:7688|回复:10
资深技术总监
如题,properties配置文件在项目中是经常用到的,那么读取properties配置文件的方法有哪些呢?
方法一:可以通过java.util.Properties类的load()方法InputStreamin=lnewBufferedInputStream(newFileInputStream(name));
Propertiesp=newProperties();
p.load(in);方法二:利用spring来读取properties配置文件
org.springframework.beans.factory.support.PropertiesBeanDefinitionReader
方法三:通过java.util.ResourceBundle类的getBundle()方法ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());方法四:通过java.util.PropertyResourceBundle类的构造函数InputStream in = new BufferedInputStream(new FileInputStream(name));
ResourceBundle rb = new PropertyResourceBundle(in);感谢 提供的一种方法
ResourceBundle res = ResourceBundle.getBundle(baseName);
baseName为 包路径/文件名(不带后缀)
比如properties文件在com.tt包下,文件名为tt.properties
则baseNamewei com/tt/tt
方法五:使用class变量的getResourceAsStream()方法InputStream in = JProperties.class.getResourceAsStream(name);
Properties p = new Properties();
p.load(in);方法六:通过class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
Properties p = new Properties();
p.load(in);方法七:通过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);暂时就找到这么多,大家有好的也可以说说...
感谢分享~~
本帖最后由 yuke198907 于
12:31 编辑
资深技术总监
你们平时是properties配置文件用的多,还是xml配置文件用的多呢?
永不期待,永不假设,永不强求,顺其自然……
需要我顶起嘛~~~
天天好心情~~~
引用:原帖由 yuke198907 于
22:18 发表
你们平时是properties配置文件用的多,还是xml配置文件用的多呢? 都用&&框架的话 xml比较多&&如果自己写的话 肯定是用properties
天天好心情~~~
资深技术总监
引用:原帖由 java_along 于
22:47 发表
需要我顶起嘛~~~ 必须的呀...
永不期待,永不假设,永不强求,顺其自然……
资深技术总监
引用:原帖由 java_along 于
22:48 发表
都用&&框架的话 xml比较多&&如果自己写的话 肯定是用properties 不用框架的话,xml也是很好用的
永不期待,永不假设,永不强求,顺其自然……
引用:原帖由 yuke198907 于
22:51 发表
不用框架的话,xml也是很好用的 懒得解析, 直接properties 多爽
天天好心情~~~
资深技术总监
引用:原帖由 java_along 于
22:53 发表
懒得解析, 直接properties 多爽 properties的话只能一对一,xml还可以一对多,多对多,多元化配置
永不期待,永不假设,永不强求,顺其自然……
引用:原帖由 yuke198907 于
22:55 发表
properties的话只能一对一,xml还可以一对多,多对多,多元化配置 当然 如果很复杂的 话 果断 xml的 ~~
天天好心情~~~
资深技术总监
引用:原帖由 java_along 于
22:56 发表
当然 如果很复杂的 话 果断 xml的 ~~ xml就是解析麻烦点...
永不期待,永不假设,永不强求,顺其自然……
引用:原帖由 yuke198907 于
22:57 发表
xml就是解析麻烦点... SAX解析 ? 好久没用了 都不知道怎么解析了 貌似要用到 dom4j是吧
天天好心情~~~
资深技术总监
引用:原帖由 java_along 于
23:00 发表
SAX解析 ? 好久没用了 都不知道怎么解析了 貌似要用到 dom4j是吧 恩,是的,解析方法有很多的
永不期待,永不假设,永不强求,顺其自然……
资深技术总监
对于读取property文件我一般是读取到静态类中,这样就可以减少IO操作了,缺点是修改property文件需要重启
资深技术总监
引用:原帖由 梦朝思夕 于
08:54 发表
对于读取property文件我一般是读取到静态类中,这样就可以减少IO操作了,缺点是修改property文件需要重启 嗯,视情况而定...
永不期待,永不假设,永不强求,顺其自然……
初级工程师
方法四——版本二
ResourceBundle res = ResourceBundle.getBundle(baseName);
baseName为 包路径/文件名(不带后缀)
比如properties文件在com.tt包下,文件名为tt.properties
则baseNamewei com/tt/tt
资深技术总监
引用:原帖由 luochen1314 于
09:19 发表
方法四——版本二
ResourceBundle res = ResourceBundle.getBundle(baseName);
baseName为 包路径/文件名(不带后缀)
比如properties文件在com.tt包下,文件名为tt.properties
则baseNamewei com/tt/tt ... 感谢关注哦,给你加上
永不期待,永不假设,永不强求,顺其自然……
初级工程师
引用:原帖由 yuke198907 于
12:29 发表
感谢关注哦,给你加上
我也是最近才发现这一用法滴,感觉还算挺方便的
资深技术总监
引用:原帖由 luochen1314 于
13:32 发表
我也是最近才发现这一用法滴,感觉还算挺方便的 嗯,不错,给个精神鼓励
永不期待,永不假设,永不强求,顺其自然……
很好,很有帮助,多谢楼主总结~~
资深技术总监
引用:原帖由 fhbsmile 于
07:46 发表
很好,很有帮助,多谢楼主总结~~ 不客气~
永不期待,永不假设,永不强求,顺其自然……2012年 总版技术专家分年内排行榜第一2007年 总版技术专家分年内排行榜第二2006年 总版技术专家分年内排行榜第二2004年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第三2003年 总版技术专家分年内排行榜第三2002年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第一2007年 总版技术专家分年内排行榜第二2006年 总版技术专家分年内排行榜第二2004年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第三2003年 总版技术专家分年内排行榜第三2002年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第一2007年 总版技术专家分年内排行榜第二2006年 总版技术专家分年内排行榜第二2004年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第三2003年 总版技术专家分年内排行榜第三2002年 总版技术专家分年内排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。博客分类:
实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理。例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.properties中。
其中部分配置信息(邮件发送相关):
#邮件发送的相关配置
email.host =
email.port = xxx
email.username = xxx
email.password = xxx
email.sendFrom =
在Spring容器启动时,使用内置bean对属性文件信息进行加载,在bean.xml中添加如下:
&!-- spring的属性加载器,加载properties文件中的属性 --&
&bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&
&property name="location"&
&value&/WEB-INF/configInfo.properties&/value&
&/property&
&property name="fileEncoding" value="utf-8" /&
&/bean&
属性信息加载后其中一种使用方式是在其它bean定义中直接根据属性信息的key引用value,如邮件发送器bean的配置如下:
&!-- 邮件发送 --&
&bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl"&
&property name="host"&
&value&${email.host}&/value&
&/property&
&property name="port"&
&value&${email.port}&/value&
&/property&
&property name="username"&
&value&${email.username}&/value&
&/property&
&property name="password"&
&value&${email.password}&/value&
&/property&
&property name="javaMailProperties"&
&prop key="mail.smtp.auth"&true&/prop&
&prop key="sendFrom"&${email.sendFrom}&/prop&
&/property&
&/bean&
另一种使用方式是在代码中获取配置的属性信息,可定义一个javabean:ConfigInfo.java,利用注解将代码中需要使用的属性信息注入;如属性文件中有如下信息需在代码中获取使用:
#生成文件的保存路径
file.savePath = D:/test/
#生成文件的备份路径,使用后将对应文件移到该目录
file.backupPath = D:/test bak/
ConfigInfo.java 中对应代码:
@Component("configInfo")
public class ConfigInfo {
@Value("${file.savePath}")
private String fileSaveP
@Value("${file.backupPath}")
private String fileBakP
public String getFileSavePath() {
return fileSaveP
public String getFileBakPath() {
return fileBakP
}
业务类bo中使用注解注入ConfigInfo对象:
@Autowired
private ConfigInfo configI
需在bean.xml中添加组件扫描器,用于注解方式的自动注入:
&context:component-scan base-package="com.my.model" /&(上述包model中包含了ConfigInfo类)。
通过get方法获取对应的属性信息,优点是代码中使用方便,缺点是如果代码中需用到新的属性信息,需对ConfigInfo.java做相应的添加修改。
浏览 34095
wuyaweiwude
浏览: 77378 次
来自: 大连}

我要回帖

更多关于 java如何加载配置文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信