一、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读取小结的更多相关文章

  1. java properties读取与设值

    import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...

  2. 关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)

    从Spring框架流行后,几乎根本不用自己写解析配置文件的代码了,但近日一个基础项目(实在是太基础,不能用硕大繁琐的Spring), 碰到了用java.util.Properties读取中文内容(UT ...

  3. Properties读取properties配置文件

    package cn.rocker.readProperties; import java.io.IOException; import java.io.InputStream; import jav ...

  4. ResourceBundle与Properties读取配置文件

    ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...

  5. 解决使用Properties读取中文乱码问题

    web服务返回的是多行以key和value对应的键值对,且编码为utf-8.我的项目使用的编码也是utf-8,但是我用Properties读取中文的时候,打印出来的总是乱码. 后来网上查了一下,得到如 ...

  6. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...

  7. java.util.Properties 读取配置文件中的参数

    用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...

  8. 【spring boot】SpringBoot初学(2.1) - properties读取明细

    前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...

  9. Properties读取属性文件

    import java.util.*;import java.io.*;class PropertiesDemo{ public static void main(String[] args) thr ...

随机推荐

  1. 微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营

    微软MVP社区秋日巡讲 —— 北京Windows  Phone应用开发训练营 活动说明和报名地址www.aka.ms\mvpbeijing 欢迎北京的朋友参与在今年10月举办的Windows Phon ...

  2. 回归JavaScript基础(六)

    主题:引用类型Date.RegExp的介绍. 上节主要主要介绍了Object.Array引用类型.这节将继续为大家介绍引用类型,并对书中的一些知识点进行总结与归纳,也借此巩固自己对JavaScript ...

  3. 需要警惕的linux命令

    Linux shell/terminal命令非常强大,即使一个简单的命令就可能导致文件夹.文件或者路径文件夹等被删除.为了避免这样的事情发生,我们应该时刻注意PHP代码&命令,今天为大家带来9 ...

  4. GreenPlum 5.0的安装

    基本环境: server IP MDW 172.16.16.31 SDW1 172.16.16.34 SDW2 172.16.16.35 1:检查操作系统是否符合要求,以及系统设置. 我这里使用的系统 ...

  5. asp.net使用一般处理程序实现文件下载

    首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...

  6. Matlab绘图——对称曲线绘制(转)

    转自 http://blog.csdn.net/lyqmath/article/details/6004885 目的:对曲线数据做对称绘制 思想:根据两曲线按a对称,则x1 + x2 = 2a的原则 ...

  7. October 06th 2017 Week 40th Friday

    The greatest ideal man can set before himself is self-perfection. 一个人最高的理想是自我完善. To be better than t ...

  8. [2018HN省队集训D5T2] party

    [2018HN省队集训D5T2] party 题意 给定一棵 \(n\) 个点以 \(1\) 为根的有根树, 每个点有一个 \([1,m]\) 的权值. 有 \(q\) 个查询, 每次给定一个大小为 ...

  9. MEMCACHE与REDIS

    千万数据量的高并发,容灾. Redis 基于单线程, 持久性 多数据类型 内存中只存KEY Redis支持数据的备份,即master-slave模式的数据备份. Redis与Memcached的区别 ...

  10. 记一次webservice的超时时间设置

    一次项目组中需要控制超时时间,前期习惯用CXF实现,熟悉的才是最好的.所以这次依然想用CXF实现. 实现的方式代码如下: static{ String fvpWebserviceUrl = Prope ...