Properties读取小结
一、Java程序中读取properties文件
加载的工具类:
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* Properties工具类
* @author happyqing
* @since 2014.6.6
*/
public class PropertiesUtil {
private static final Log log = LogFactory.getLog(PropertiesUtil.class);
private static Properties env = new Properties(); static {
try {
//PropertiesHelper.class.getResourceAsStream("env.properties"); // /com/cici/conf/env.properties
//ClassLoader.getSystemResourceAsStream("env.properties");
InputStream is = PropertiesUtil.class.getClassLoader().getResourceAsStream("env.properties");
env.load(is);
is.close();
} catch (Exception e) {
log.error(e);
}
} /**
* 取属性值
* @param key
* @return
*/
public static String getProperty(String key){
return env.getProperty(key);
} /**
* 设置属性值
* @param key
* @param value
*/
public static void setProperty(String key, String value){
try{
File file = new File(PropertiesUtil.class.getClassLoader().getResource(".").getPath()+File.separator+"env.properties");
FileOutputStream outStream = new FileOutputStream(file);
env.setProperty(key, value);
//写入properties文件
env.store(outStream, null);
} catch (Exception ex) {
log.error(ex);
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(PropertiesUtil.getProperty("txtLength"));
//System.out.println(PropertiesUtil.class.getClassLoader().getResource(".").getPath());
}
}
频繁的配置文件读取与操作,推荐apache commons大家庭的成员:commons-configuration
文件结构目录如图所示:

其中,config2为与src同级的sourec folder,c.properties位于src根目录,b.properties位于src/config1 folder下
a.properties位于cn.package1包下。所有结果均已成功测试,测试环境为Myeclipse2016+JDK8
其实以下也就是程序路径的区分
1.读取a.properties:
package cn.package1; import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import org.junit.Test; public class Demo01 {
@Test
public void fun1() throws IOException{
InputStream in1 = Demo01.class.getClassLoader()
.getResourceAsStream("cn/package1/a.properties");
Properties props = new Properties();
props.load(in1);
String value1 = props.getProperty("name");
System.out.println(value1);
}
}
(输入流的处理以及关闭可以改进)
2.读取b.properties:
(重复代码已经省略!)
InputStream in1 = Demo01.class.getClassLoader()
.getResourceAsStream("config1/b.properties");
3.读取c.properties:
InputStream in1 = Demo01.class.getClassLoader()
.getResourceAsStream("c.properties");
4.读取d.properties:
InputStream in1 = Demo01.class.getClassLoader()
.getResourceAsStream("d.properties");
二、Spring项目中读取properties
总之就是,一定要加载到properties文件然后才能读取(xml文件读取或者java代码读取),至于加载的方式,可以是下面的直接使用context标签进行加载,例如使用classpath:*.properties(见下文配置文件),或者使用文末随笔中提到的使用spring的bean来进行加载!
1.配置文件中使用——使用${}取值即可
spring配置文件如何读取属性配置文件:
<!-- 加载配置属性文件 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:jeesite.properties" />
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
springMVC中进行配置:
<!-- 加载配置属性文件 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:jeesite.properties" /> <!-- 使用Annotation自动注册Bean,只扫描@Controller -->
<context:component-scan base-package="com.thinkgem.jeesite" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
// 必须注意,不使用默认的过滤器!
2.Java代码中取值——使用@Value读取
/**
* 管理基础路径
*/
@Value("${adminPath}")
protected String adminPath; /**
* 前端基础路径
*/
@Value("${frontPath}")
protected String frontPath; /**
* 前端URL后缀
*/
@Value("${urlSuffix}")
protected String urlSuffix;
// 像这里我们可以直接把它做成一个父类,这样每个类只需要继承父类便可使用此变量,而无须重复使用每个类的局部变量
请谨记很多东西没必要写死的应该写在配置文件中,比如服务器的地址,数据库的密码等,不应该在程序中写死,而应该归配置文件管理!
spring中读取配置文件也可以参见:http://www.cnblogs.com/Gyoung/p/5507063.html
Properties读取小结的更多相关文章
- java properties读取与设值
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...
- 关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)
从Spring框架流行后,几乎根本不用自己写解析配置文件的代码了,但近日一个基础项目(实在是太基础,不能用硕大繁琐的Spring), 碰到了用java.util.Properties读取中文内容(UT ...
- Properties读取properties配置文件
package cn.rocker.readProperties; import java.io.IOException; import java.io.InputStream; import jav ...
- ResourceBundle与Properties读取配置文件
ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...
- 解决使用Properties读取中文乱码问题
web服务返回的是多行以key和value对应的键值对,且编码为utf-8.我的项目使用的编码也是utf-8,但是我用Properties读取中文的时候,打印出来的总是乱码. 后来网上查了一下,得到如 ...
- ResourceBundle和properties 读取配置文件区别
java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...
- java.util.Properties 读取配置文件中的参数
用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...
- 【spring boot】SpringBoot初学(2.1) - properties读取明细
前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...
- Properties读取属性文件
import java.util.*;import java.io.*;class PropertiesDemo{ public static void main(String[] args) thr ...
随机推荐
- 微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营
微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营 活动说明和报名地址www.aka.ms\mvpbeijing 欢迎北京的朋友参与在今年10月举办的Windows Phon ...
- 回归JavaScript基础(六)
主题:引用类型Date.RegExp的介绍. 上节主要主要介绍了Object.Array引用类型.这节将继续为大家介绍引用类型,并对书中的一些知识点进行总结与归纳,也借此巩固自己对JavaScript ...
- 需要警惕的linux命令
Linux shell/terminal命令非常强大,即使一个简单的命令就可能导致文件夹.文件或者路径文件夹等被删除.为了避免这样的事情发生,我们应该时刻注意PHP代码&命令,今天为大家带来9 ...
- GreenPlum 5.0的安装
基本环境: server IP MDW 172.16.16.31 SDW1 172.16.16.34 SDW2 172.16.16.35 1:检查操作系统是否符合要求,以及系统设置. 我这里使用的系统 ...
- asp.net使用一般处理程序实现文件下载
首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...
- Matlab绘图——对称曲线绘制(转)
转自 http://blog.csdn.net/lyqmath/article/details/6004885 目的:对曲线数据做对称绘制 思想:根据两曲线按a对称,则x1 + x2 = 2a的原则 ...
- October 06th 2017 Week 40th Friday
The greatest ideal man can set before himself is self-perfection. 一个人最高的理想是自我完善. To be better than t ...
- [2018HN省队集训D5T2] party
[2018HN省队集训D5T2] party 题意 给定一棵 \(n\) 个点以 \(1\) 为根的有根树, 每个点有一个 \([1,m]\) 的权值. 有 \(q\) 个查询, 每次给定一个大小为 ...
- MEMCACHE与REDIS
千万数据量的高并发,容灾. Redis 基于单线程, 持久性 多数据类型 内存中只存KEY Redis支持数据的备份,即master-slave模式的数据备份. Redis与Memcached的区别 ...
- 记一次webservice的超时时间设置
一次项目组中需要控制超时时间,前期习惯用CXF实现,熟悉的才是最好的.所以这次依然想用CXF实现. 实现的方式代码如下: static{ String fvpWebserviceUrl = Prope ...