一、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. 团队项目——软件需求分析(NABCD)

    一.团队项目简介 团队名称:SmartCoder 项目名称:<一起> 二.针对 " 地图可视化查看发布的内容 " 这一特点进行 NABCD 分析 N(Need需求) 往 ...

  2. 结对编程——四则运算器(UI第十组)

    博客目录: 一.问题描述                   二.设计思路                   三.UI开发过程                       四.对接过程       ...

  3. 心灵鸡汤[all]

    1. [iPhone 有哪些非常有必要下载的 App] 2. 相 信 自 己 3. 英语四级作文模板 4. 比尔盖茨的人生忠告 5. 李嘉诚 <Are you ready> 6. 李嘉诚语 ...

  4. asp.net core中DockerFile文件中的COPY

    今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...

  5. Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)

    虽然,从HBase的概念视图来看,每个表格是由很多行组成的,但是在物理存储上面,它是按照列来保存的,这一点在进行数据设计和程序开发的时候必须牢记. 在物理存储上面,它是按照列来保存的 需要注意的是,在 ...

  6. (转)em重建全过程

    该问题遇到N次,被郁闷N次,特此记录以备不时之需 由于n久不用em,而本机在公司使用dhcp自动获取ip,导致ip变化,而使em启动报出ora-12514 DBD ERROR: OCIServerAt ...

  7. python第十四课--排序及自定义函数之自定义函数(案例四)

    整理:4中最常见的自定义函数模型1).无参无返回值2).无参有返回值3).有参无返回值4).有参有返回值 #定义无参无返回值自定义函数 def func1(): print('hello method ...

  8. iOS网络缓存的系统实现是一个烂尾工程

    烂尾的原因是request的一致性比较接口没有开放出来.

  9. 【转】【iOS开发】打开另一个APP(URL Scheme与openURL)

    目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能.本篇文章讲的就是打开别人的APP的一些知识.我们的目标是: 打开别人的APP 让别人打开我们的APP iOS9的适配问题 使用URL Sc ...

  10. Odoo图片如何显示

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9281423.html odoo没有专门的图片标签,但是可以通过widget来控制field标签来显示图片内容. ...